/********************************************************************************
 * 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: app.h
////////////////////////////////////////////////////////////
#ifndef app_h
#define app_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 AppInstMac              biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 2  TYPE                      
///                                    ###
///                                    * 0: MAC
///                                    * 1: MAX
///                                    * 2: Soft limitor
///                                    ###
///               %unsigned 1  ASUM                      
///                                    ###
///                                    * 1: add sum to the product
///                                    * 0: do not add sum to the product
///                                    ###
///               %unsigned 1  SSUM                      
///                                    ###
///                                    * 1: save new sum to SRAM
///                                    * 0: do not save new sum to SRAM
///                                    ###
///               %unsigned 1  Reserved0                 
///               %unsigned 3  SHIFT                     
///                                    ###
///                                    * Right shift sum (28+SHIFT) before save back to memory
///                                    * Valid only if SSUM is 1
///                                    ###
///               %unsigned 16 SRCADR1                   
///                                    ###
///                                    * SRAM address of the input data 1
///                                    ###
///               %%        8          # Stuffing bits...
///               %unsigned 16 SRCADR0                   
///                                    ###
///                                    * SRAM address of the input data 0
///                                    ###
///               %unsigned 16 DESADR                    
///                                    ###
///                                    * SRAM address of output data
///                                    * Valid only if SSUM is 1
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      56b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppInstMac
#define h_AppInstMac (){}

    #define     BA_AppInstMac_TYPE                             0x0000
    #define     B16AppInstMac_TYPE                             0x0000
    #define   LSb32AppInstMac_TYPE                                0
    #define   LSb16AppInstMac_TYPE                                0
    #define       bAppInstMac_TYPE                             2
    #define   MSK32AppInstMac_TYPE                                0x00000003

    #define     BA_AppInstMac_ASUM                             0x0000
    #define     B16AppInstMac_ASUM                             0x0000
    #define   LSb32AppInstMac_ASUM                                2
    #define   LSb16AppInstMac_ASUM                                2
    #define       bAppInstMac_ASUM                             1
    #define   MSK32AppInstMac_ASUM                                0x00000004

    #define     BA_AppInstMac_SSUM                             0x0000
    #define     B16AppInstMac_SSUM                             0x0000
    #define   LSb32AppInstMac_SSUM                                3
    #define   LSb16AppInstMac_SSUM                                3
    #define       bAppInstMac_SSUM                             1
    #define   MSK32AppInstMac_SSUM                                0x00000008

    #define     BA_AppInstMac_Reserved0                        0x0000
    #define     B16AppInstMac_Reserved0                        0x0000
    #define   LSb32AppInstMac_Reserved0                           4
    #define   LSb16AppInstMac_Reserved0                           4
    #define       bAppInstMac_Reserved0                        1
    #define   MSK32AppInstMac_Reserved0                           0x00000010

    #define     BA_AppInstMac_SHIFT                            0x0000
    #define     B16AppInstMac_SHIFT                            0x0000
    #define   LSb32AppInstMac_SHIFT                               5
    #define   LSb16AppInstMac_SHIFT                               5
    #define       bAppInstMac_SHIFT                            3
    #define   MSK32AppInstMac_SHIFT                               0x000000E0

    #define     BA_AppInstMac_SRCADR1                          0x0001
    #define     B16AppInstMac_SRCADR1                          0x0000
    #define   LSb32AppInstMac_SRCADR1                             8
    #define   LSb16AppInstMac_SRCADR1                             8
    #define       bAppInstMac_SRCADR1                          16
    #define   MSK32AppInstMac_SRCADR1                             0x00FFFF00

    #define     BA_AppInstMac_SRCADR0                          0x0004
    #define     B16AppInstMac_SRCADR0                          0x0004
    #define   LSb32AppInstMac_SRCADR0                             0
    #define   LSb16AppInstMac_SRCADR0                             0
    #define       bAppInstMac_SRCADR0                          16
    #define   MSK32AppInstMac_SRCADR0                             0x0000FFFF

    #define     BA_AppInstMac_DESADR                           0x0006
    #define     B16AppInstMac_DESADR                           0x0006
    #define   LSb32AppInstMac_DESADR                              16
    #define   LSb16AppInstMac_DESADR                              0
    #define       bAppInstMac_DESADR                           16
    #define   MSK32AppInstMac_DESADR                              0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppInstMac {
    ///////////////////////////////////////////////////////////
    #define   GET32AppInstMac_TYPE(r32)                        _BFGET_(r32, 1, 0)
    #define   SET32AppInstMac_TYPE(r32,v)                      _BFSET_(r32, 1, 0,v)
    #define   GET16AppInstMac_TYPE(r16)                        _BFGET_(r16, 1, 0)
    #define   SET16AppInstMac_TYPE(r16,v)                      _BFSET_(r16, 1, 0,v)

    #define   GET32AppInstMac_ASUM(r32)                        _BFGET_(r32, 2, 2)
    #define   SET32AppInstMac_ASUM(r32,v)                      _BFSET_(r32, 2, 2,v)
    #define   GET16AppInstMac_ASUM(r16)                        _BFGET_(r16, 2, 2)
    #define   SET16AppInstMac_ASUM(r16,v)                      _BFSET_(r16, 2, 2,v)

    #define   GET32AppInstMac_SSUM(r32)                        _BFGET_(r32, 3, 3)
    #define   SET32AppInstMac_SSUM(r32,v)                      _BFSET_(r32, 3, 3,v)
    #define   GET16AppInstMac_SSUM(r16)                        _BFGET_(r16, 3, 3)
    #define   SET16AppInstMac_SSUM(r16,v)                      _BFSET_(r16, 3, 3,v)

    #define   GET32AppInstMac_Reserved0(r32)                   _BFGET_(r32, 4, 4)
    #define   SET32AppInstMac_Reserved0(r32,v)                 _BFSET_(r32, 4, 4,v)
    #define   GET16AppInstMac_Reserved0(r16)                   _BFGET_(r16, 4, 4)
    #define   SET16AppInstMac_Reserved0(r16,v)                 _BFSET_(r16, 4, 4,v)

    #define   GET32AppInstMac_SHIFT(r32)                       _BFGET_(r32, 7, 5)
    #define   SET32AppInstMac_SHIFT(r32,v)                     _BFSET_(r32, 7, 5,v)
    #define   GET16AppInstMac_SHIFT(r16)                       _BFGET_(r16, 7, 5)
    #define   SET16AppInstMac_SHIFT(r16,v)                     _BFSET_(r16, 7, 5,v)

    #define   GET32AppInstMac_SRCADR1(r32)                     _BFGET_(r32,23, 8)
    #define   SET32AppInstMac_SRCADR1(r32,v)                   _BFSET_(r32,23, 8,v)

            UNSG32 u_TYPE                                      :  2;
            UNSG32 u_ASUM                                      :  1;
            UNSG32 u_SSUM                                      :  1;
            UNSG32 u_Reserved0                                 :  1;
            UNSG32 u_SHIFT                                     :  3;
            UNSG32 u_SRCADR1                                   : 16;
            UNSG32 RSVDx0_b24                                  :  8;
    ///////////////////////////////////////////////////////////

    #define   GET32AppInstMac_SRCADR0(r32)                     _BFGET_(r32,15, 0)
    #define   SET32AppInstMac_SRCADR0(r32,v)                   _BFSET_(r32,15, 0,v)
    #define   GET16AppInstMac_SRCADR0(r16)                     _BFGET_(r16,15, 0)
    #define   SET16AppInstMac_SRCADR0(r16,v)                   _BFSET_(r16,15, 0,v)

    #define   GET32AppInstMac_DESADR(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppInstMac_DESADR(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppInstMac_DESADR(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppInstMac_DESADR(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 u_SRCADR0                                   : 16;
            UNSG32 u_DESADR                                    : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppInstMac;

    ///////////////////////////////////////////////////////////
     SIGN32 AppInstMac_drvrd(SIE_AppInstMac *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppInstMac_drvwr(SIE_AppInstMac *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppInstMac_reset(SIE_AppInstMac *p);
     SIGN32 AppInstMac_cmp  (SIE_AppInstMac *p, SIE_AppInstMac *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppInstMac_check(p,pie,pfx,hLOG) AppInstMac_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppInstMac_print(p,    pfx,hLOG) AppInstMac_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppInstMac
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppNop                  biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppNop is 0
///                                    ###
///               %unsigned 1  INTERRUPT                 
///                                    ###
///                                    * If this bit is set, app will send a interrupt through port intCmd
///                                    ###
///               %unsigned 27 Reserved0                 
///               %unsigned 32 Reserved1                 
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppNop
#define h_AppNop (){}

    #define     BA_AppNop_TYPE                                 0x0000
    #define     B16AppNop_TYPE                                 0x0000
    #define   LSb32AppNop_TYPE                                    0
    #define   LSb16AppNop_TYPE                                    0
    #define       bAppNop_TYPE                                 4
    #define   MSK32AppNop_TYPE                                    0x0000000F

    #define     BA_AppNop_INTERRUPT                            0x0000
    #define     B16AppNop_INTERRUPT                            0x0000
    #define   LSb32AppNop_INTERRUPT                               4
    #define   LSb16AppNop_INTERRUPT                               4
    #define       bAppNop_INTERRUPT                            1
    #define   MSK32AppNop_INTERRUPT                               0x00000010

    #define     BA_AppNop_Reserved0                            0x0000
    #define     B16AppNop_Reserved0                            0x0000
    #define   LSb32AppNop_Reserved0                               5
    #define   LSb16AppNop_Reserved0                               5
    #define       bAppNop_Reserved0                            27
    #define   MSK32AppNop_Reserved0                               0xFFFFFFE0

    #define     BA_AppNop_Reserved1                            0x0004
    #define     B16AppNop_Reserved1                            0x0004
    #define   LSb32AppNop_Reserved1                               0
    #define   LSb16AppNop_Reserved1                               0
    #define       bAppNop_Reserved1                            32
    #define   MSK32AppNop_Reserved1                               0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppNop {
    ///////////////////////////////////////////////////////////
    #define   GET32AppNop_TYPE(r32)                            _BFGET_(r32, 3, 0)
    #define   SET32AppNop_TYPE(r32,v)                          _BFSET_(r32, 3, 0,v)
    #define   GET16AppNop_TYPE(r16)                            _BFGET_(r16, 3, 0)
    #define   SET16AppNop_TYPE(r16,v)                          _BFSET_(r16, 3, 0,v)

    #define   GET32AppNop_INTERRUPT(r32)                       _BFGET_(r32, 4, 4)
    #define   SET32AppNop_INTERRUPT(r32,v)                     _BFSET_(r32, 4, 4,v)
    #define   GET16AppNop_INTERRUPT(r16)                       _BFGET_(r16, 4, 4)
    #define   SET16AppNop_INTERRUPT(r16,v)                     _BFSET_(r16, 4, 4,v)

    #define   GET32AppNop_Reserved0(r32)                       _BFGET_(r32,31, 5)
    #define   SET32AppNop_Reserved0(r32,v)                     _BFSET_(r32,31, 5,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_INTERRUPT                                 :  1;
            UNSG32 u_Reserved0                                 : 27;
    ///////////////////////////////////////////////////////////

    #define   GET32AppNop_Reserved1(r32)                       _BFGET_(r32,31, 0)
    #define   SET32AppNop_Reserved1(r32,v)                     _BFSET_(r32,31, 0,v)

            UNSG32 u_Reserved1                                 : 32;
    ///////////////////////////////////////////////////////////
    } SIE_AppNop;

    ///////////////////////////////////////////////////////////
     SIGN32 AppNop_drvrd(SIE_AppNop *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppNop_drvwr(SIE_AppNop *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppNop_reset(SIE_AppNop *p);
     SIGN32 AppNop_cmp  (SIE_AppNop *p, SIE_AppNop *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppNop_check(p,pie,pfx,hLOG) AppNop_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppNop_print(p,    pfx,hLOG) AppNop_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppNop
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppDmaCmd               biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppDmaCmd is 1
///                                    ###
///               %unsigned 4  Reserved0                 
///               %unsigned 1  W                         
///                                    ###
///                                    * Direction of the DMA transfer
///                                    * 0 for DDR to DMA;
///                                    * 1 for DMA to DDR
///                                    ###
///               %unsigned 1  INTERRUPT                 
///                                    ###
///                                    * If this bit is set, app will send an interrupt through port intDma after all the data is transferred.
///                                    ###
///               %unsigned 1  FLUSHW                    
///                                    ###
///                                    * 1: Wait until all the posted write commands are finished before sending this command to DMA;
///                                    * 0: Post the command to DMA without waiting;
///                                    * When this bit is not set, write commands and read commands are executed independently and order is not guaranteed. Firmware can set this bit in a read command to enforce the read command to be executed only after all the pervious write commands are finished (data is written into DDR).
///                                    * Setting this bit will affect the DMA performance. Therefore, firmware should only use it whenever it is required.
///                                    ###
///               %unsigned 1  FLUSHR                    
///                                    ###
///                                    * 1: Wait until all the posted read commands are finished before sending this command to DMA;
///                                    * 0: Post the command to DMA without waiting;
///                                    ###
///               %unsigned 4  Reserved1                 
///               %unsigned 16 LENGTH                    
///                                    ###
///                                    * Size of the DMA transfer minus 1, in byte
///                                    ###
///               %unsigned 32 DDRADR                    
///                                    ###
///                                    * DDR address of the DMA transfer, in byte
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppDmaCmd
#define h_AppDmaCmd (){}

    #define     BA_AppDmaCmd_TYPE                              0x0000
    #define     B16AppDmaCmd_TYPE                              0x0000
    #define   LSb32AppDmaCmd_TYPE                                 0
    #define   LSb16AppDmaCmd_TYPE                                 0
    #define       bAppDmaCmd_TYPE                              4
    #define   MSK32AppDmaCmd_TYPE                                 0x0000000F

    #define     BA_AppDmaCmd_Reserved0                         0x0000
    #define     B16AppDmaCmd_Reserved0                         0x0000
    #define   LSb32AppDmaCmd_Reserved0                            4
    #define   LSb16AppDmaCmd_Reserved0                            4
    #define       bAppDmaCmd_Reserved0                         4
    #define   MSK32AppDmaCmd_Reserved0                            0x000000F0

    #define     BA_AppDmaCmd_W                                 0x0001
    #define     B16AppDmaCmd_W                                 0x0000
    #define   LSb32AppDmaCmd_W                                    8
    #define   LSb16AppDmaCmd_W                                    8
    #define       bAppDmaCmd_W                                 1
    #define   MSK32AppDmaCmd_W                                    0x00000100

    #define     BA_AppDmaCmd_INTERRUPT                         0x0001
    #define     B16AppDmaCmd_INTERRUPT                         0x0000
    #define   LSb32AppDmaCmd_INTERRUPT                            9
    #define   LSb16AppDmaCmd_INTERRUPT                            9
    #define       bAppDmaCmd_INTERRUPT                         1
    #define   MSK32AppDmaCmd_INTERRUPT                            0x00000200

    #define     BA_AppDmaCmd_FLUSHW                            0x0001
    #define     B16AppDmaCmd_FLUSHW                            0x0000
    #define   LSb32AppDmaCmd_FLUSHW                               10
    #define   LSb16AppDmaCmd_FLUSHW                               10
    #define       bAppDmaCmd_FLUSHW                            1
    #define   MSK32AppDmaCmd_FLUSHW                               0x00000400

    #define     BA_AppDmaCmd_FLUSHR                            0x0001
    #define     B16AppDmaCmd_FLUSHR                            0x0000
    #define   LSb32AppDmaCmd_FLUSHR                               11
    #define   LSb16AppDmaCmd_FLUSHR                               11
    #define       bAppDmaCmd_FLUSHR                            1
    #define   MSK32AppDmaCmd_FLUSHR                               0x00000800

    #define     BA_AppDmaCmd_Reserved1                         0x0001
    #define     B16AppDmaCmd_Reserved1                         0x0000
    #define   LSb32AppDmaCmd_Reserved1                            12
    #define   LSb16AppDmaCmd_Reserved1                            12
    #define       bAppDmaCmd_Reserved1                         4
    #define   MSK32AppDmaCmd_Reserved1                            0x0000F000

    #define     BA_AppDmaCmd_LENGTH                            0x0002
    #define     B16AppDmaCmd_LENGTH                            0x0002
    #define   LSb32AppDmaCmd_LENGTH                               16
    #define   LSb16AppDmaCmd_LENGTH                               0
    #define       bAppDmaCmd_LENGTH                            16
    #define   MSK32AppDmaCmd_LENGTH                               0xFFFF0000

    #define     BA_AppDmaCmd_DDRADR                            0x0004
    #define     B16AppDmaCmd_DDRADR                            0x0004
    #define   LSb32AppDmaCmd_DDRADR                               0
    #define   LSb16AppDmaCmd_DDRADR                               0
    #define       bAppDmaCmd_DDRADR                            32
    #define   MSK32AppDmaCmd_DDRADR                               0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppDmaCmd {
    ///////////////////////////////////////////////////////////
    #define   GET32AppDmaCmd_TYPE(r32)                         _BFGET_(r32, 3, 0)
    #define   SET32AppDmaCmd_TYPE(r32,v)                       _BFSET_(r32, 3, 0,v)
    #define   GET16AppDmaCmd_TYPE(r16)                         _BFGET_(r16, 3, 0)
    #define   SET16AppDmaCmd_TYPE(r16,v)                       _BFSET_(r16, 3, 0,v)

    #define   GET32AppDmaCmd_Reserved0(r32)                    _BFGET_(r32, 7, 4)
    #define   SET32AppDmaCmd_Reserved0(r32,v)                  _BFSET_(r32, 7, 4,v)
    #define   GET16AppDmaCmd_Reserved0(r16)                    _BFGET_(r16, 7, 4)
    #define   SET16AppDmaCmd_Reserved0(r16,v)                  _BFSET_(r16, 7, 4,v)

    #define   GET32AppDmaCmd_W(r32)                            _BFGET_(r32, 8, 8)
    #define   SET32AppDmaCmd_W(r32,v)                          _BFSET_(r32, 8, 8,v)
    #define   GET16AppDmaCmd_W(r16)                            _BFGET_(r16, 8, 8)
    #define   SET16AppDmaCmd_W(r16,v)                          _BFSET_(r16, 8, 8,v)

    #define   GET32AppDmaCmd_INTERRUPT(r32)                    _BFGET_(r32, 9, 9)
    #define   SET32AppDmaCmd_INTERRUPT(r32,v)                  _BFSET_(r32, 9, 9,v)
    #define   GET16AppDmaCmd_INTERRUPT(r16)                    _BFGET_(r16, 9, 9)
    #define   SET16AppDmaCmd_INTERRUPT(r16,v)                  _BFSET_(r16, 9, 9,v)

    #define   GET32AppDmaCmd_FLUSHW(r32)                       _BFGET_(r32,10,10)
    #define   SET32AppDmaCmd_FLUSHW(r32,v)                     _BFSET_(r32,10,10,v)
    #define   GET16AppDmaCmd_FLUSHW(r16)                       _BFGET_(r16,10,10)
    #define   SET16AppDmaCmd_FLUSHW(r16,v)                     _BFSET_(r16,10,10,v)

    #define   GET32AppDmaCmd_FLUSHR(r32)                       _BFGET_(r32,11,11)
    #define   SET32AppDmaCmd_FLUSHR(r32,v)                     _BFSET_(r32,11,11,v)
    #define   GET16AppDmaCmd_FLUSHR(r16)                       _BFGET_(r16,11,11)
    #define   SET16AppDmaCmd_FLUSHR(r16,v)                     _BFSET_(r16,11,11,v)

    #define   GET32AppDmaCmd_Reserved1(r32)                    _BFGET_(r32,15,12)
    #define   SET32AppDmaCmd_Reserved1(r32,v)                  _BFSET_(r32,15,12,v)
    #define   GET16AppDmaCmd_Reserved1(r16)                    _BFGET_(r16,15,12)
    #define   SET16AppDmaCmd_Reserved1(r16,v)                  _BFSET_(r16,15,12,v)

    #define   GET32AppDmaCmd_LENGTH(r32)                       _BFGET_(r32,31,16)
    #define   SET32AppDmaCmd_LENGTH(r32,v)                     _BFSET_(r32,31,16,v)
    #define   GET16AppDmaCmd_LENGTH(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppDmaCmd_LENGTH(r16,v)                     _BFSET_(r16,15, 0,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved0                                 :  4;
            UNSG32 u_W                                         :  1;
            UNSG32 u_INTERRUPT                                 :  1;
            UNSG32 u_FLUSHW                                    :  1;
            UNSG32 u_FLUSHR                                    :  1;
            UNSG32 u_Reserved1                                 :  4;
            UNSG32 u_LENGTH                                    : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppDmaCmd_DDRADR(r32)                       _BFGET_(r32,31, 0)
    #define   SET32AppDmaCmd_DDRADR(r32,v)                     _BFSET_(r32,31, 0,v)

            UNSG32 u_DDRADR                                    : 32;
    ///////////////////////////////////////////////////////////
    } SIE_AppDmaCmd;

    ///////////////////////////////////////////////////////////
     SIGN32 AppDmaCmd_drvrd(SIE_AppDmaCmd *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppDmaCmd_drvwr(SIE_AppDmaCmd *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppDmaCmd_reset(SIE_AppDmaCmd *p);
     SIGN32 AppDmaCmd_cmp  (SIE_AppDmaCmd *p, SIE_AppDmaCmd *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppDmaCmd_check(p,pie,pfx,hLOG) AppDmaCmd_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppDmaCmd_print(p,    pfx,hLOG) AppDmaCmd_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppDmaCmd
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppDmaDat               biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppDmaDat is 2
///                                    ###
///               %unsigned 1  W                         
///                                    ###
///                                    * Direction of the DMA transfer
///                                    * 0 for DMA to APP;
///                                    * 1 for APP to DMA
///                                    ###
///               %unsigned 3  Reserved0                 
///               %unsigned 12 LENGTH                    
///                                    ###
///                                    * Length of the data to be loaded from DMA to APP SRAM minus 1, in DW
///                                    ###
///               %unsigned 12 OFFSET                    
///                                    ###
///                                    * Offset address of the transfer in the source/destination buffer, in DW
///                                    ###
///               %unsigned 12 BUFSIZE                   
///                                    ###
///                                    * Size of the source/destination buffer in APP SRAM minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved1                 
///               %unsigned 16 BUFBASE                   
///                                    ###
///                                    * Base address of the source/destination buffer in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppDmaDat
#define h_AppDmaDat (){}

    #define     BA_AppDmaDat_TYPE                              0x0000
    #define     B16AppDmaDat_TYPE                              0x0000
    #define   LSb32AppDmaDat_TYPE                                 0
    #define   LSb16AppDmaDat_TYPE                                 0
    #define       bAppDmaDat_TYPE                              4
    #define   MSK32AppDmaDat_TYPE                                 0x0000000F

    #define     BA_AppDmaDat_W                                 0x0000
    #define     B16AppDmaDat_W                                 0x0000
    #define   LSb32AppDmaDat_W                                    4
    #define   LSb16AppDmaDat_W                                    4
    #define       bAppDmaDat_W                                 1
    #define   MSK32AppDmaDat_W                                    0x00000010

    #define     BA_AppDmaDat_Reserved0                         0x0000
    #define     B16AppDmaDat_Reserved0                         0x0000
    #define   LSb32AppDmaDat_Reserved0                            5
    #define   LSb16AppDmaDat_Reserved0                            5
    #define       bAppDmaDat_Reserved0                         3
    #define   MSK32AppDmaDat_Reserved0                            0x000000E0

    #define     BA_AppDmaDat_LENGTH                            0x0001
    #define     B16AppDmaDat_LENGTH                            0x0000
    #define   LSb32AppDmaDat_LENGTH                               8
    #define   LSb16AppDmaDat_LENGTH                               8
    #define       bAppDmaDat_LENGTH                            12
    #define   MSK32AppDmaDat_LENGTH                               0x000FFF00

    #define     BA_AppDmaDat_OFFSET                            0x0002
    #define     B16AppDmaDat_OFFSET                            0x0002
    #define   LSb32AppDmaDat_OFFSET                               20
    #define   LSb16AppDmaDat_OFFSET                               4
    #define       bAppDmaDat_OFFSET                            12
    #define   MSK32AppDmaDat_OFFSET                               0xFFF00000

    #define     BA_AppDmaDat_BUFSIZE                           0x0004
    #define     B16AppDmaDat_BUFSIZE                           0x0004
    #define   LSb32AppDmaDat_BUFSIZE                              0
    #define   LSb16AppDmaDat_BUFSIZE                              0
    #define       bAppDmaDat_BUFSIZE                           12
    #define   MSK32AppDmaDat_BUFSIZE                              0x00000FFF

    #define     BA_AppDmaDat_Reserved1                         0x0005
    #define     B16AppDmaDat_Reserved1                         0x0004
    #define   LSb32AppDmaDat_Reserved1                            12
    #define   LSb16AppDmaDat_Reserved1                            12
    #define       bAppDmaDat_Reserved1                         4
    #define   MSK32AppDmaDat_Reserved1                            0x0000F000

    #define     BA_AppDmaDat_BUFBASE                           0x0006
    #define     B16AppDmaDat_BUFBASE                           0x0006
    #define   LSb32AppDmaDat_BUFBASE                              16
    #define   LSb16AppDmaDat_BUFBASE                              0
    #define       bAppDmaDat_BUFBASE                           16
    #define   MSK32AppDmaDat_BUFBASE                              0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppDmaDat {
    ///////////////////////////////////////////////////////////
    #define   GET32AppDmaDat_TYPE(r32)                         _BFGET_(r32, 3, 0)
    #define   SET32AppDmaDat_TYPE(r32,v)                       _BFSET_(r32, 3, 0,v)
    #define   GET16AppDmaDat_TYPE(r16)                         _BFGET_(r16, 3, 0)
    #define   SET16AppDmaDat_TYPE(r16,v)                       _BFSET_(r16, 3, 0,v)

    #define   GET32AppDmaDat_W(r32)                            _BFGET_(r32, 4, 4)
    #define   SET32AppDmaDat_W(r32,v)                          _BFSET_(r32, 4, 4,v)
    #define   GET16AppDmaDat_W(r16)                            _BFGET_(r16, 4, 4)
    #define   SET16AppDmaDat_W(r16,v)                          _BFSET_(r16, 4, 4,v)

    #define   GET32AppDmaDat_Reserved0(r32)                    _BFGET_(r32, 7, 5)
    #define   SET32AppDmaDat_Reserved0(r32,v)                  _BFSET_(r32, 7, 5,v)
    #define   GET16AppDmaDat_Reserved0(r16)                    _BFGET_(r16, 7, 5)
    #define   SET16AppDmaDat_Reserved0(r16,v)                  _BFSET_(r16, 7, 5,v)

    #define   GET32AppDmaDat_LENGTH(r32)                       _BFGET_(r32,19, 8)
    #define   SET32AppDmaDat_LENGTH(r32,v)                     _BFSET_(r32,19, 8,v)

    #define   GET32AppDmaDat_OFFSET(r32)                       _BFGET_(r32,31,20)
    #define   SET32AppDmaDat_OFFSET(r32,v)                     _BFSET_(r32,31,20,v)
    #define   GET16AppDmaDat_OFFSET(r16)                       _BFGET_(r16,15, 4)
    #define   SET16AppDmaDat_OFFSET(r16,v)                     _BFSET_(r16,15, 4,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_W                                         :  1;
            UNSG32 u_Reserved0                                 :  3;
            UNSG32 u_LENGTH                                    : 12;
            UNSG32 u_OFFSET                                    : 12;
    ///////////////////////////////////////////////////////////

    #define   GET32AppDmaDat_BUFSIZE(r32)                      _BFGET_(r32,11, 0)
    #define   SET32AppDmaDat_BUFSIZE(r32,v)                    _BFSET_(r32,11, 0,v)
    #define   GET16AppDmaDat_BUFSIZE(r16)                      _BFGET_(r16,11, 0)
    #define   SET16AppDmaDat_BUFSIZE(r16,v)                    _BFSET_(r16,11, 0,v)

    #define   GET32AppDmaDat_Reserved1(r32)                    _BFGET_(r32,15,12)
    #define   SET32AppDmaDat_Reserved1(r32,v)                  _BFSET_(r32,15,12,v)
    #define   GET16AppDmaDat_Reserved1(r16)                    _BFGET_(r16,15,12)
    #define   SET16AppDmaDat_Reserved1(r16,v)                  _BFSET_(r16,15,12,v)

    #define   GET32AppDmaDat_BUFBASE(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppDmaDat_BUFBASE(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppDmaDat_BUFBASE(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppDmaDat_BUFBASE(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 u_BUFSIZE                                   : 12;
            UNSG32 u_Reserved1                                 :  4;
            UNSG32 u_BUFBASE                                   : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppDmaDat;

    ///////////////////////////////////////////////////////////
     SIGN32 AppDmaDat_drvrd(SIE_AppDmaDat *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppDmaDat_drvwr(SIE_AppDmaDat *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppDmaDat_reset(SIE_AppDmaDat *p);
     SIGN32 AppDmaDat_cmp  (SIE_AppDmaDat *p, SIE_AppDmaDat *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppDmaDat_check(p,pie,pfx,hLOG) AppDmaDat_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppDmaDat_print(p,    pfx,hLOG) AppDmaDat_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppDmaDat
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppCopy                 biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppCopy is 3
///                                    ###
///               %unsigned 12 Reserved0                 
///               %unsigned 4  CHANNEL                   
///                                    ###
///                                    * number of channels to process minus 1
///                                    ###
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of audio samples to copy minus 1
///                                    ###
///               %unsigned 3  Reserved5                 
///               %unsigned 12 SOFFSET                   
///                                    ###
///                                    * Offset address of the start point in the source buffer, in DW
///                                    ###
///               %unsigned 4  Reserved1                 
///               %unsigned 12 SBUFSIZE                  
///                                    ###
///                                    * Size of the source buffer in APP SRAM minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved2                 
///               %unsigned 16 SBUFBASE                  
///                                    ###
///                                    * Base address of the source buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 12 DOFFSET                   
///                                    ###
///                                    * Offset address of the start point in the destination buffer, in DW
///                                    ###
///               %unsigned 4  Reserved3                 
///               %unsigned 12 DBUFSIZE                  
///                                    ###
///                                    * Size of the destination buffer in APP SRAM minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved4                 
///               %unsigned 16 DBUFBASE                  
///                                    ###
///                                    * Base address of the destination buffer in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppCopy
#define h_AppCopy (){}

    #define     BA_AppCopy_TYPE                                0x0000
    #define     B16AppCopy_TYPE                                0x0000
    #define   LSb32AppCopy_TYPE                                   0
    #define   LSb16AppCopy_TYPE                                   0
    #define       bAppCopy_TYPE                                4
    #define   MSK32AppCopy_TYPE                                   0x0000000F

    #define     BA_AppCopy_Reserved0                           0x0000
    #define     B16AppCopy_Reserved0                           0x0000
    #define   LSb32AppCopy_Reserved0                              4
    #define   LSb16AppCopy_Reserved0                              4
    #define       bAppCopy_Reserved0                           12
    #define   MSK32AppCopy_Reserved0                              0x0000FFF0

    #define     BA_AppCopy_CHANNEL                             0x0002
    #define     B16AppCopy_CHANNEL                             0x0002
    #define   LSb32AppCopy_CHANNEL                                16
    #define   LSb16AppCopy_CHANNEL                                0
    #define       bAppCopy_CHANNEL                             4
    #define   MSK32AppCopy_CHANNEL                                0x000F0000

    #define     BA_AppCopy_LENGTH                              0x0002
    #define     B16AppCopy_LENGTH                              0x0002
    #define   LSb32AppCopy_LENGTH                                 20
    #define   LSb16AppCopy_LENGTH                                 4
    #define       bAppCopy_LENGTH                              9
    #define   MSK32AppCopy_LENGTH                                 0x1FF00000

    #define     BA_AppCopy_Reserved5                           0x0003
    #define     B16AppCopy_Reserved5                           0x0002
    #define   LSb32AppCopy_Reserved5                              29
    #define   LSb16AppCopy_Reserved5                              13
    #define       bAppCopy_Reserved5                           3
    #define   MSK32AppCopy_Reserved5                              0xE0000000

    #define     BA_AppCopy_SOFFSET                             0x0004
    #define     B16AppCopy_SOFFSET                             0x0004
    #define   LSb32AppCopy_SOFFSET                                0
    #define   LSb16AppCopy_SOFFSET                                0
    #define       bAppCopy_SOFFSET                             12
    #define   MSK32AppCopy_SOFFSET                                0x00000FFF

    #define     BA_AppCopy_Reserved1                           0x0005
    #define     B16AppCopy_Reserved1                           0x0004
    #define   LSb32AppCopy_Reserved1                              12
    #define   LSb16AppCopy_Reserved1                              12
    #define       bAppCopy_Reserved1                           4
    #define   MSK32AppCopy_Reserved1                              0x0000F000

    #define     BA_AppCopy_SBUFSIZE                            0x0006
    #define     B16AppCopy_SBUFSIZE                            0x0006
    #define   LSb32AppCopy_SBUFSIZE                               16
    #define   LSb16AppCopy_SBUFSIZE                               0
    #define       bAppCopy_SBUFSIZE                            12
    #define   MSK32AppCopy_SBUFSIZE                               0x0FFF0000

    #define     BA_AppCopy_Reserved2                           0x0007
    #define     B16AppCopy_Reserved2                           0x0006
    #define   LSb32AppCopy_Reserved2                              28
    #define   LSb16AppCopy_Reserved2                              12
    #define       bAppCopy_Reserved2                           4
    #define   MSK32AppCopy_Reserved2                              0xF0000000

    #define     BA_AppCopy_SBUFBASE                            0x0008
    #define     B16AppCopy_SBUFBASE                            0x0008
    #define   LSb32AppCopy_SBUFBASE                               0
    #define   LSb16AppCopy_SBUFBASE                               0
    #define       bAppCopy_SBUFBASE                            16
    #define   MSK32AppCopy_SBUFBASE                               0x0000FFFF

    #define     BA_AppCopy_DOFFSET                             0x000A
    #define     B16AppCopy_DOFFSET                             0x000A
    #define   LSb32AppCopy_DOFFSET                                16
    #define   LSb16AppCopy_DOFFSET                                0
    #define       bAppCopy_DOFFSET                             12
    #define   MSK32AppCopy_DOFFSET                                0x0FFF0000

    #define     BA_AppCopy_Reserved3                           0x000B
    #define     B16AppCopy_Reserved3                           0x000A
    #define   LSb32AppCopy_Reserved3                              28
    #define   LSb16AppCopy_Reserved3                              12
    #define       bAppCopy_Reserved3                           4
    #define   MSK32AppCopy_Reserved3                              0xF0000000

    #define     BA_AppCopy_DBUFSIZE                            0x000C
    #define     B16AppCopy_DBUFSIZE                            0x000C
    #define   LSb32AppCopy_DBUFSIZE                               0
    #define   LSb16AppCopy_DBUFSIZE                               0
    #define       bAppCopy_DBUFSIZE                            12
    #define   MSK32AppCopy_DBUFSIZE                               0x00000FFF

    #define     BA_AppCopy_Reserved4                           0x000D
    #define     B16AppCopy_Reserved4                           0x000C
    #define   LSb32AppCopy_Reserved4                              12
    #define   LSb16AppCopy_Reserved4                              12
    #define       bAppCopy_Reserved4                           4
    #define   MSK32AppCopy_Reserved4                              0x0000F000

    #define     BA_AppCopy_DBUFBASE                            0x000E
    #define     B16AppCopy_DBUFBASE                            0x000E
    #define   LSb32AppCopy_DBUFBASE                               16
    #define   LSb16AppCopy_DBUFBASE                               0
    #define       bAppCopy_DBUFBASE                            16
    #define   MSK32AppCopy_DBUFBASE                               0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppCopy {
    ///////////////////////////////////////////////////////////
    #define   GET32AppCopy_TYPE(r32)                           _BFGET_(r32, 3, 0)
    #define   SET32AppCopy_TYPE(r32,v)                         _BFSET_(r32, 3, 0,v)
    #define   GET16AppCopy_TYPE(r16)                           _BFGET_(r16, 3, 0)
    #define   SET16AppCopy_TYPE(r16,v)                         _BFSET_(r16, 3, 0,v)

    #define   GET32AppCopy_Reserved0(r32)                      _BFGET_(r32,15, 4)
    #define   SET32AppCopy_Reserved0(r32,v)                    _BFSET_(r32,15, 4,v)
    #define   GET16AppCopy_Reserved0(r16)                      _BFGET_(r16,15, 4)
    #define   SET16AppCopy_Reserved0(r16,v)                    _BFSET_(r16,15, 4,v)

    #define   GET32AppCopy_CHANNEL(r32)                        _BFGET_(r32,19,16)
    #define   SET32AppCopy_CHANNEL(r32,v)                      _BFSET_(r32,19,16,v)
    #define   GET16AppCopy_CHANNEL(r16)                        _BFGET_(r16, 3, 0)
    #define   SET16AppCopy_CHANNEL(r16,v)                      _BFSET_(r16, 3, 0,v)

    #define   GET32AppCopy_LENGTH(r32)                         _BFGET_(r32,28,20)
    #define   SET32AppCopy_LENGTH(r32,v)                       _BFSET_(r32,28,20,v)
    #define   GET16AppCopy_LENGTH(r16)                         _BFGET_(r16,12, 4)
    #define   SET16AppCopy_LENGTH(r16,v)                       _BFSET_(r16,12, 4,v)

    #define   GET32AppCopy_Reserved5(r32)                      _BFGET_(r32,31,29)
    #define   SET32AppCopy_Reserved5(r32,v)                    _BFSET_(r32,31,29,v)
    #define   GET16AppCopy_Reserved5(r16)                      _BFGET_(r16,15,13)
    #define   SET16AppCopy_Reserved5(r16,v)                    _BFSET_(r16,15,13,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved0                                 : 12;
            UNSG32 u_CHANNEL                                   :  4;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_Reserved5                                 :  3;
    ///////////////////////////////////////////////////////////

    #define   GET32AppCopy_SOFFSET(r32)                        _BFGET_(r32,11, 0)
    #define   SET32AppCopy_SOFFSET(r32,v)                      _BFSET_(r32,11, 0,v)
    #define   GET16AppCopy_SOFFSET(r16)                        _BFGET_(r16,11, 0)
    #define   SET16AppCopy_SOFFSET(r16,v)                      _BFSET_(r16,11, 0,v)

    #define   GET32AppCopy_Reserved1(r32)                      _BFGET_(r32,15,12)
    #define   SET32AppCopy_Reserved1(r32,v)                    _BFSET_(r32,15,12,v)
    #define   GET16AppCopy_Reserved1(r16)                      _BFGET_(r16,15,12)
    #define   SET16AppCopy_Reserved1(r16,v)                    _BFSET_(r16,15,12,v)

    #define   GET32AppCopy_SBUFSIZE(r32)                       _BFGET_(r32,27,16)
    #define   SET32AppCopy_SBUFSIZE(r32,v)                     _BFSET_(r32,27,16,v)
    #define   GET16AppCopy_SBUFSIZE(r16)                       _BFGET_(r16,11, 0)
    #define   SET16AppCopy_SBUFSIZE(r16,v)                     _BFSET_(r16,11, 0,v)

    #define   GET32AppCopy_Reserved2(r32)                      _BFGET_(r32,31,28)
    #define   SET32AppCopy_Reserved2(r32,v)                    _BFSET_(r32,31,28,v)
    #define   GET16AppCopy_Reserved2(r16)                      _BFGET_(r16,15,12)
    #define   SET16AppCopy_Reserved2(r16,v)                    _BFSET_(r16,15,12,v)

            UNSG32 u_SOFFSET                                   : 12;
            UNSG32 u_Reserved1                                 :  4;
            UNSG32 u_SBUFSIZE                                  : 12;
            UNSG32 u_Reserved2                                 :  4;
    ///////////////////////////////////////////////////////////

    #define   GET32AppCopy_SBUFBASE(r32)                       _BFGET_(r32,15, 0)
    #define   SET32AppCopy_SBUFBASE(r32,v)                     _BFSET_(r32,15, 0,v)
    #define   GET16AppCopy_SBUFBASE(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppCopy_SBUFBASE(r16,v)                     _BFSET_(r16,15, 0,v)

    #define   GET32AppCopy_DOFFSET(r32)                        _BFGET_(r32,27,16)
    #define   SET32AppCopy_DOFFSET(r32,v)                      _BFSET_(r32,27,16,v)
    #define   GET16AppCopy_DOFFSET(r16)                        _BFGET_(r16,11, 0)
    #define   SET16AppCopy_DOFFSET(r16,v)                      _BFSET_(r16,11, 0,v)

    #define   GET32AppCopy_Reserved3(r32)                      _BFGET_(r32,31,28)
    #define   SET32AppCopy_Reserved3(r32,v)                    _BFSET_(r32,31,28,v)
    #define   GET16AppCopy_Reserved3(r16)                      _BFGET_(r16,15,12)
    #define   SET16AppCopy_Reserved3(r16,v)                    _BFSET_(r16,15,12,v)

            UNSG32 u_SBUFBASE                                  : 16;
            UNSG32 u_DOFFSET                                   : 12;
            UNSG32 u_Reserved3                                 :  4;
    ///////////////////////////////////////////////////////////

    #define   GET32AppCopy_DBUFSIZE(r32)                       _BFGET_(r32,11, 0)
    #define   SET32AppCopy_DBUFSIZE(r32,v)                     _BFSET_(r32,11, 0,v)
    #define   GET16AppCopy_DBUFSIZE(r16)                       _BFGET_(r16,11, 0)
    #define   SET16AppCopy_DBUFSIZE(r16,v)                     _BFSET_(r16,11, 0,v)

    #define   GET32AppCopy_Reserved4(r32)                      _BFGET_(r32,15,12)
    #define   SET32AppCopy_Reserved4(r32,v)                    _BFSET_(r32,15,12,v)
    #define   GET16AppCopy_Reserved4(r16)                      _BFGET_(r16,15,12)
    #define   SET16AppCopy_Reserved4(r16,v)                    _BFSET_(r16,15,12,v)

    #define   GET32AppCopy_DBUFBASE(r32)                       _BFGET_(r32,31,16)
    #define   SET32AppCopy_DBUFBASE(r32,v)                     _BFSET_(r32,31,16,v)
    #define   GET16AppCopy_DBUFBASE(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppCopy_DBUFBASE(r16,v)                     _BFSET_(r16,15, 0,v)

            UNSG32 u_DBUFSIZE                                  : 12;
            UNSG32 u_Reserved4                                 :  4;
            UNSG32 u_DBUFBASE                                  : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppCopy;

    ///////////////////////////////////////////////////////////
     SIGN32 AppCopy_drvrd(SIE_AppCopy *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppCopy_drvwr(SIE_AppCopy *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppCopy_reset(SIE_AppCopy *p);
     SIGN32 AppCopy_cmp  (SIE_AppCopy *p, SIE_AppCopy *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppCopy_check(p,pie,pfx,hLOG) AppCopy_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppCopy_print(p,    pfx,hLOG) AppCopy_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppCopy
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppFilter               biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppFilter is 5
///                                    ###
///               %unsigned 1  Reserved0                 
///               %unsigned 3  SHIFT                     
///                                    ###
///                                    * SHIFT for filter sum
///                                    ###
///               %unsigned 8  Reserved6                 
///               %unsigned 4  CHANNEL                   
///                                    ###
///                                    * number of channels to process minus 1
///                                    ###
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of the output audio samples after IIR minus 1, in DW
///                                    ###
///               %unsigned 3  Reserved5                 
///               %unsigned 4  TAPB                      
///                                    ###
///                                    * Number of backward filter taps
///                                    ###
///               %unsigned 8  TAPF                      
///                                    ###
///                                    * Number of forward filter taps minus 1
///                                    ###
///               %unsigned 4  Reserved1                 
///               %unsigned 16 COADR                     
///                                    ###
///                                    * Absolute address of the filter coefficients in APP SRAM, in DW
///                                    ###
///               %unsigned 12 SBUFSIZE                  
///                                    ###
///                                    * Size of source buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved2                 
///               %unsigned 16 SBUFADR                   
///                                    ###
///                                    * Absolute address of the source buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 12 DBUFSIZE                  
///                                    ###
///                                    * Size of destination buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved3                 
///               %unsigned 16 DBUFADR                   
///                                    ###
///                                    * Absolute address of the destination buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 16 HISTADRB                  
///                                    ###
///                                    * Absolute address of the backward history data in APP SRAM, in DW
///                                    ###
///               %unsigned 16 HISTADRF                  
///                                    ###
///                                    * Absolute address of the forward history data in APP SRAM, in DW
///                                    ###
///               %unsigned 32 Reserved4                 
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      24B, bits:     192b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppFilter
#define h_AppFilter (){}

    #define     BA_AppFilter_TYPE                              0x0000
    #define     B16AppFilter_TYPE                              0x0000
    #define   LSb32AppFilter_TYPE                                 0
    #define   LSb16AppFilter_TYPE                                 0
    #define       bAppFilter_TYPE                              4
    #define   MSK32AppFilter_TYPE                                 0x0000000F

    #define     BA_AppFilter_Reserved0                         0x0000
    #define     B16AppFilter_Reserved0                         0x0000
    #define   LSb32AppFilter_Reserved0                            4
    #define   LSb16AppFilter_Reserved0                            4
    #define       bAppFilter_Reserved0                         1
    #define   MSK32AppFilter_Reserved0                            0x00000010

    #define     BA_AppFilter_SHIFT                             0x0000
    #define     B16AppFilter_SHIFT                             0x0000
    #define   LSb32AppFilter_SHIFT                                5
    #define   LSb16AppFilter_SHIFT                                5
    #define       bAppFilter_SHIFT                             3
    #define   MSK32AppFilter_SHIFT                                0x000000E0

    #define     BA_AppFilter_Reserved6                         0x0001
    #define     B16AppFilter_Reserved6                         0x0000
    #define   LSb32AppFilter_Reserved6                            8
    #define   LSb16AppFilter_Reserved6                            8
    #define       bAppFilter_Reserved6                         8
    #define   MSK32AppFilter_Reserved6                            0x0000FF00

    #define     BA_AppFilter_CHANNEL                           0x0002
    #define     B16AppFilter_CHANNEL                           0x0002
    #define   LSb32AppFilter_CHANNEL                              16
    #define   LSb16AppFilter_CHANNEL                              0
    #define       bAppFilter_CHANNEL                           4
    #define   MSK32AppFilter_CHANNEL                              0x000F0000

    #define     BA_AppFilter_LENGTH                            0x0002
    #define     B16AppFilter_LENGTH                            0x0002
    #define   LSb32AppFilter_LENGTH                               20
    #define   LSb16AppFilter_LENGTH                               4
    #define       bAppFilter_LENGTH                            9
    #define   MSK32AppFilter_LENGTH                               0x1FF00000

    #define     BA_AppFilter_Reserved5                         0x0003
    #define     B16AppFilter_Reserved5                         0x0002
    #define   LSb32AppFilter_Reserved5                            29
    #define   LSb16AppFilter_Reserved5                            13
    #define       bAppFilter_Reserved5                         3
    #define   MSK32AppFilter_Reserved5                            0xE0000000

    #define     BA_AppFilter_TAPB                              0x0004
    #define     B16AppFilter_TAPB                              0x0004
    #define   LSb32AppFilter_TAPB                                 0
    #define   LSb16AppFilter_TAPB                                 0
    #define       bAppFilter_TAPB                              4
    #define   MSK32AppFilter_TAPB                                 0x0000000F

    #define     BA_AppFilter_TAPF                              0x0004
    #define     B16AppFilter_TAPF                              0x0004
    #define   LSb32AppFilter_TAPF                                 4
    #define   LSb16AppFilter_TAPF                                 4
    #define       bAppFilter_TAPF                              8
    #define   MSK32AppFilter_TAPF                                 0x00000FF0

    #define     BA_AppFilter_Reserved1                         0x0005
    #define     B16AppFilter_Reserved1                         0x0004
    #define   LSb32AppFilter_Reserved1                            12
    #define   LSb16AppFilter_Reserved1                            12
    #define       bAppFilter_Reserved1                         4
    #define   MSK32AppFilter_Reserved1                            0x0000F000

    #define     BA_AppFilter_COADR                             0x0006
    #define     B16AppFilter_COADR                             0x0006
    #define   LSb32AppFilter_COADR                                16
    #define   LSb16AppFilter_COADR                                0
    #define       bAppFilter_COADR                             16
    #define   MSK32AppFilter_COADR                                0xFFFF0000

    #define     BA_AppFilter_SBUFSIZE                          0x0008
    #define     B16AppFilter_SBUFSIZE                          0x0008
    #define   LSb32AppFilter_SBUFSIZE                             0
    #define   LSb16AppFilter_SBUFSIZE                             0
    #define       bAppFilter_SBUFSIZE                          12
    #define   MSK32AppFilter_SBUFSIZE                             0x00000FFF

    #define     BA_AppFilter_Reserved2                         0x0009
    #define     B16AppFilter_Reserved2                         0x0008
    #define   LSb32AppFilter_Reserved2                            12
    #define   LSb16AppFilter_Reserved2                            12
    #define       bAppFilter_Reserved2                         4
    #define   MSK32AppFilter_Reserved2                            0x0000F000

    #define     BA_AppFilter_SBUFADR                           0x000A
    #define     B16AppFilter_SBUFADR                           0x000A
    #define   LSb32AppFilter_SBUFADR                              16
    #define   LSb16AppFilter_SBUFADR                              0
    #define       bAppFilter_SBUFADR                           16
    #define   MSK32AppFilter_SBUFADR                              0xFFFF0000

    #define     BA_AppFilter_DBUFSIZE                          0x000C
    #define     B16AppFilter_DBUFSIZE                          0x000C
    #define   LSb32AppFilter_DBUFSIZE                             0
    #define   LSb16AppFilter_DBUFSIZE                             0
    #define       bAppFilter_DBUFSIZE                          12
    #define   MSK32AppFilter_DBUFSIZE                             0x00000FFF

    #define     BA_AppFilter_Reserved3                         0x000D
    #define     B16AppFilter_Reserved3                         0x000C
    #define   LSb32AppFilter_Reserved3                            12
    #define   LSb16AppFilter_Reserved3                            12
    #define       bAppFilter_Reserved3                         4
    #define   MSK32AppFilter_Reserved3                            0x0000F000

    #define     BA_AppFilter_DBUFADR                           0x000E
    #define     B16AppFilter_DBUFADR                           0x000E
    #define   LSb32AppFilter_DBUFADR                              16
    #define   LSb16AppFilter_DBUFADR                              0
    #define       bAppFilter_DBUFADR                           16
    #define   MSK32AppFilter_DBUFADR                              0xFFFF0000

    #define     BA_AppFilter_HISTADRB                          0x0010
    #define     B16AppFilter_HISTADRB                          0x0010
    #define   LSb32AppFilter_HISTADRB                             0
    #define   LSb16AppFilter_HISTADRB                             0
    #define       bAppFilter_HISTADRB                          16
    #define   MSK32AppFilter_HISTADRB                             0x0000FFFF

    #define     BA_AppFilter_HISTADRF                          0x0012
    #define     B16AppFilter_HISTADRF                          0x0012
    #define   LSb32AppFilter_HISTADRF                             16
    #define   LSb16AppFilter_HISTADRF                             0
    #define       bAppFilter_HISTADRF                          16
    #define   MSK32AppFilter_HISTADRF                             0xFFFF0000

    #define     BA_AppFilter_Reserved4                         0x0014
    #define     B16AppFilter_Reserved4                         0x0014
    #define   LSb32AppFilter_Reserved4                            0
    #define   LSb16AppFilter_Reserved4                            0
    #define       bAppFilter_Reserved4                         32
    #define   MSK32AppFilter_Reserved4                            0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppFilter {
    ///////////////////////////////////////////////////////////
    #define   GET32AppFilter_TYPE(r32)                         _BFGET_(r32, 3, 0)
    #define   SET32AppFilter_TYPE(r32,v)                       _BFSET_(r32, 3, 0,v)
    #define   GET16AppFilter_TYPE(r16)                         _BFGET_(r16, 3, 0)
    #define   SET16AppFilter_TYPE(r16,v)                       _BFSET_(r16, 3, 0,v)

    #define   GET32AppFilter_Reserved0(r32)                    _BFGET_(r32, 4, 4)
    #define   SET32AppFilter_Reserved0(r32,v)                  _BFSET_(r32, 4, 4,v)
    #define   GET16AppFilter_Reserved0(r16)                    _BFGET_(r16, 4, 4)
    #define   SET16AppFilter_Reserved0(r16,v)                  _BFSET_(r16, 4, 4,v)

    #define   GET32AppFilter_SHIFT(r32)                        _BFGET_(r32, 7, 5)
    #define   SET32AppFilter_SHIFT(r32,v)                      _BFSET_(r32, 7, 5,v)
    #define   GET16AppFilter_SHIFT(r16)                        _BFGET_(r16, 7, 5)
    #define   SET16AppFilter_SHIFT(r16,v)                      _BFSET_(r16, 7, 5,v)

    #define   GET32AppFilter_Reserved6(r32)                    _BFGET_(r32,15, 8)
    #define   SET32AppFilter_Reserved6(r32,v)                  _BFSET_(r32,15, 8,v)
    #define   GET16AppFilter_Reserved6(r16)                    _BFGET_(r16,15, 8)
    #define   SET16AppFilter_Reserved6(r16,v)                  _BFSET_(r16,15, 8,v)

    #define   GET32AppFilter_CHANNEL(r32)                      _BFGET_(r32,19,16)
    #define   SET32AppFilter_CHANNEL(r32,v)                    _BFSET_(r32,19,16,v)
    #define   GET16AppFilter_CHANNEL(r16)                      _BFGET_(r16, 3, 0)
    #define   SET16AppFilter_CHANNEL(r16,v)                    _BFSET_(r16, 3, 0,v)

    #define   GET32AppFilter_LENGTH(r32)                       _BFGET_(r32,28,20)
    #define   SET32AppFilter_LENGTH(r32,v)                     _BFSET_(r32,28,20,v)
    #define   GET16AppFilter_LENGTH(r16)                       _BFGET_(r16,12, 4)
    #define   SET16AppFilter_LENGTH(r16,v)                     _BFSET_(r16,12, 4,v)

    #define   GET32AppFilter_Reserved5(r32)                    _BFGET_(r32,31,29)
    #define   SET32AppFilter_Reserved5(r32,v)                  _BFSET_(r32,31,29,v)
    #define   GET16AppFilter_Reserved5(r16)                    _BFGET_(r16,15,13)
    #define   SET16AppFilter_Reserved5(r16,v)                  _BFSET_(r16,15,13,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved0                                 :  1;
            UNSG32 u_SHIFT                                     :  3;
            UNSG32 u_Reserved6                                 :  8;
            UNSG32 u_CHANNEL                                   :  4;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_Reserved5                                 :  3;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFilter_TAPB(r32)                         _BFGET_(r32, 3, 0)
    #define   SET32AppFilter_TAPB(r32,v)                       _BFSET_(r32, 3, 0,v)
    #define   GET16AppFilter_TAPB(r16)                         _BFGET_(r16, 3, 0)
    #define   SET16AppFilter_TAPB(r16,v)                       _BFSET_(r16, 3, 0,v)

    #define   GET32AppFilter_TAPF(r32)                         _BFGET_(r32,11, 4)
    #define   SET32AppFilter_TAPF(r32,v)                       _BFSET_(r32,11, 4,v)
    #define   GET16AppFilter_TAPF(r16)                         _BFGET_(r16,11, 4)
    #define   SET16AppFilter_TAPF(r16,v)                       _BFSET_(r16,11, 4,v)

    #define   GET32AppFilter_Reserved1(r32)                    _BFGET_(r32,15,12)
    #define   SET32AppFilter_Reserved1(r32,v)                  _BFSET_(r32,15,12,v)
    #define   GET16AppFilter_Reserved1(r16)                    _BFGET_(r16,15,12)
    #define   SET16AppFilter_Reserved1(r16,v)                  _BFSET_(r16,15,12,v)

    #define   GET32AppFilter_COADR(r32)                        _BFGET_(r32,31,16)
    #define   SET32AppFilter_COADR(r32,v)                      _BFSET_(r32,31,16,v)
    #define   GET16AppFilter_COADR(r16)                        _BFGET_(r16,15, 0)
    #define   SET16AppFilter_COADR(r16,v)                      _BFSET_(r16,15, 0,v)

            UNSG32 u_TAPB                                      :  4;
            UNSG32 u_TAPF                                      :  8;
            UNSG32 u_Reserved1                                 :  4;
            UNSG32 u_COADR                                     : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFilter_SBUFSIZE(r32)                     _BFGET_(r32,11, 0)
    #define   SET32AppFilter_SBUFSIZE(r32,v)                   _BFSET_(r32,11, 0,v)
    #define   GET16AppFilter_SBUFSIZE(r16)                     _BFGET_(r16,11, 0)
    #define   SET16AppFilter_SBUFSIZE(r16,v)                   _BFSET_(r16,11, 0,v)

    #define   GET32AppFilter_Reserved2(r32)                    _BFGET_(r32,15,12)
    #define   SET32AppFilter_Reserved2(r32,v)                  _BFSET_(r32,15,12,v)
    #define   GET16AppFilter_Reserved2(r16)                    _BFGET_(r16,15,12)
    #define   SET16AppFilter_Reserved2(r16,v)                  _BFSET_(r16,15,12,v)

    #define   GET32AppFilter_SBUFADR(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppFilter_SBUFADR(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppFilter_SBUFADR(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppFilter_SBUFADR(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 u_SBUFSIZE                                  : 12;
            UNSG32 u_Reserved2                                 :  4;
            UNSG32 u_SBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFilter_DBUFSIZE(r32)                     _BFGET_(r32,11, 0)
    #define   SET32AppFilter_DBUFSIZE(r32,v)                   _BFSET_(r32,11, 0,v)
    #define   GET16AppFilter_DBUFSIZE(r16)                     _BFGET_(r16,11, 0)
    #define   SET16AppFilter_DBUFSIZE(r16,v)                   _BFSET_(r16,11, 0,v)

    #define   GET32AppFilter_Reserved3(r32)                    _BFGET_(r32,15,12)
    #define   SET32AppFilter_Reserved3(r32,v)                  _BFSET_(r32,15,12,v)
    #define   GET16AppFilter_Reserved3(r16)                    _BFGET_(r16,15,12)
    #define   SET16AppFilter_Reserved3(r16,v)                  _BFSET_(r16,15,12,v)

    #define   GET32AppFilter_DBUFADR(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppFilter_DBUFADR(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppFilter_DBUFADR(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppFilter_DBUFADR(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 u_DBUFSIZE                                  : 12;
            UNSG32 u_Reserved3                                 :  4;
            UNSG32 u_DBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFilter_HISTADRB(r32)                     _BFGET_(r32,15, 0)
    #define   SET32AppFilter_HISTADRB(r32,v)                   _BFSET_(r32,15, 0,v)
    #define   GET16AppFilter_HISTADRB(r16)                     _BFGET_(r16,15, 0)
    #define   SET16AppFilter_HISTADRB(r16,v)                   _BFSET_(r16,15, 0,v)

    #define   GET32AppFilter_HISTADRF(r32)                     _BFGET_(r32,31,16)
    #define   SET32AppFilter_HISTADRF(r32,v)                   _BFSET_(r32,31,16,v)
    #define   GET16AppFilter_HISTADRF(r16)                     _BFGET_(r16,15, 0)
    #define   SET16AppFilter_HISTADRF(r16,v)                   _BFSET_(r16,15, 0,v)

            UNSG32 u_HISTADRB                                  : 16;
            UNSG32 u_HISTADRF                                  : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFilter_Reserved4(r32)                    _BFGET_(r32,31, 0)
    #define   SET32AppFilter_Reserved4(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_Reserved4                                 : 32;
    ///////////////////////////////////////////////////////////
    } SIE_AppFilter;

    ///////////////////////////////////////////////////////////
     SIGN32 AppFilter_drvrd(SIE_AppFilter *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppFilter_drvwr(SIE_AppFilter *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppFilter_reset(SIE_AppFilter *p);
     SIGN32 AppFilter_cmp  (SIE_AppFilter *p, SIE_AppFilter *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppFilter_check(p,pie,pfx,hLOG) AppFilter_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppFilter_print(p,    pfx,hLOG) AppFilter_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppFilter
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppSrc                  biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppSrc is 8
///                                    ###
///               %unsigned 1  Reserved0                 
///               %unsigned 3  SHIFT                     
///                                    ###
///                                    * pass to AppMac.SHIFT
///                                    ###
///               %unsigned 8  Reserved1                 
///               %unsigned 4  CHANNEL                   
///                                    ###
///                                    * number of channels to process minus 1
///                                    ###
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of the input audio samples before SRC minus 1, in DW
///                                    ###
///               %unsigned 3  Reserved7                 
///               %unsigned 16 Reserved2                 
///               %unsigned 16 COADR                     
///                                    ###
///                                    * Absolute address of the coefficients buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 12 SOFFSET                   
///                                    ###
///                                    * Offset address of the start point in the source buffer, in DW
///                                    ###
///               %unsigned 4  Reserved3                 
///               %unsigned 12 SBUFSIZE                  
///                                    ###
///                                    * Size of the source buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved4                 
///               %unsigned 16 SBUFBASE                  
///                                    ###
///                                    * Base address of the source buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 12 DOFFSET                   
///                                    ###
///                                    * Offset address of the start point in the destination buffer, in DW
///                                    ###
///               %unsigned 4  Reserved5                 
///               %unsigned 12 DBUFSIZE                  
///                                    ###
///                                    * Size of the destination buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved6                 
///               %unsigned 16 DBUFBASE                  
///                                    ###
///                                    * Base address of the destination buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 8  TAP                       
///                                    ###
///                                    * Number of the filter taps minus 1
///                                    ###
///               %unsigned 8  N                         
///                                    ###
///                                    * Up sampling rate
///                                    ###
///               %unsigned 8  M                         
///                                    ###
///                                    * Down sampling rate
///                                    ###
///               %unsigned 8  INIT_PHASE                
///                                    ###
///                                    * initial output phase. Value of INIT_PHASE should range from 1 to M, inclusive.
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      24B, bits:     192b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppSrc
#define h_AppSrc (){}

    #define     BA_AppSrc_TYPE                                 0x0000
    #define     B16AppSrc_TYPE                                 0x0000
    #define   LSb32AppSrc_TYPE                                    0
    #define   LSb16AppSrc_TYPE                                    0
    #define       bAppSrc_TYPE                                 4
    #define   MSK32AppSrc_TYPE                                    0x0000000F

    #define     BA_AppSrc_Reserved0                            0x0000
    #define     B16AppSrc_Reserved0                            0x0000
    #define   LSb32AppSrc_Reserved0                               4
    #define   LSb16AppSrc_Reserved0                               4
    #define       bAppSrc_Reserved0                            1
    #define   MSK32AppSrc_Reserved0                               0x00000010

    #define     BA_AppSrc_SHIFT                                0x0000
    #define     B16AppSrc_SHIFT                                0x0000
    #define   LSb32AppSrc_SHIFT                                   5
    #define   LSb16AppSrc_SHIFT                                   5
    #define       bAppSrc_SHIFT                                3
    #define   MSK32AppSrc_SHIFT                                   0x000000E0

    #define     BA_AppSrc_Reserved1                            0x0001
    #define     B16AppSrc_Reserved1                            0x0000
    #define   LSb32AppSrc_Reserved1                               8
    #define   LSb16AppSrc_Reserved1                               8
    #define       bAppSrc_Reserved1                            8
    #define   MSK32AppSrc_Reserved1                               0x0000FF00

    #define     BA_AppSrc_CHANNEL                              0x0002
    #define     B16AppSrc_CHANNEL                              0x0002
    #define   LSb32AppSrc_CHANNEL                                 16
    #define   LSb16AppSrc_CHANNEL                                 0
    #define       bAppSrc_CHANNEL                              4
    #define   MSK32AppSrc_CHANNEL                                 0x000F0000

    #define     BA_AppSrc_LENGTH                               0x0002
    #define     B16AppSrc_LENGTH                               0x0002
    #define   LSb32AppSrc_LENGTH                                  20
    #define   LSb16AppSrc_LENGTH                                  4
    #define       bAppSrc_LENGTH                               9
    #define   MSK32AppSrc_LENGTH                                  0x1FF00000

    #define     BA_AppSrc_Reserved7                            0x0003
    #define     B16AppSrc_Reserved7                            0x0002
    #define   LSb32AppSrc_Reserved7                               29
    #define   LSb16AppSrc_Reserved7                               13
    #define       bAppSrc_Reserved7                            3
    #define   MSK32AppSrc_Reserved7                               0xE0000000

    #define     BA_AppSrc_Reserved2                            0x0004
    #define     B16AppSrc_Reserved2                            0x0004
    #define   LSb32AppSrc_Reserved2                               0
    #define   LSb16AppSrc_Reserved2                               0
    #define       bAppSrc_Reserved2                            16
    #define   MSK32AppSrc_Reserved2                               0x0000FFFF

    #define     BA_AppSrc_COADR                                0x0006
    #define     B16AppSrc_COADR                                0x0006
    #define   LSb32AppSrc_COADR                                   16
    #define   LSb16AppSrc_COADR                                   0
    #define       bAppSrc_COADR                                16
    #define   MSK32AppSrc_COADR                                   0xFFFF0000

    #define     BA_AppSrc_SOFFSET                              0x0008
    #define     B16AppSrc_SOFFSET                              0x0008
    #define   LSb32AppSrc_SOFFSET                                 0
    #define   LSb16AppSrc_SOFFSET                                 0
    #define       bAppSrc_SOFFSET                              12
    #define   MSK32AppSrc_SOFFSET                                 0x00000FFF

    #define     BA_AppSrc_Reserved3                            0x0009
    #define     B16AppSrc_Reserved3                            0x0008
    #define   LSb32AppSrc_Reserved3                               12
    #define   LSb16AppSrc_Reserved3                               12
    #define       bAppSrc_Reserved3                            4
    #define   MSK32AppSrc_Reserved3                               0x0000F000

    #define     BA_AppSrc_SBUFSIZE                             0x000A
    #define     B16AppSrc_SBUFSIZE                             0x000A
    #define   LSb32AppSrc_SBUFSIZE                                16
    #define   LSb16AppSrc_SBUFSIZE                                0
    #define       bAppSrc_SBUFSIZE                             12
    #define   MSK32AppSrc_SBUFSIZE                                0x0FFF0000

    #define     BA_AppSrc_Reserved4                            0x000B
    #define     B16AppSrc_Reserved4                            0x000A
    #define   LSb32AppSrc_Reserved4                               28
    #define   LSb16AppSrc_Reserved4                               12
    #define       bAppSrc_Reserved4                            4
    #define   MSK32AppSrc_Reserved4                               0xF0000000

    #define     BA_AppSrc_SBUFBASE                             0x000C
    #define     B16AppSrc_SBUFBASE                             0x000C
    #define   LSb32AppSrc_SBUFBASE                                0
    #define   LSb16AppSrc_SBUFBASE                                0
    #define       bAppSrc_SBUFBASE                             16
    #define   MSK32AppSrc_SBUFBASE                                0x0000FFFF

    #define     BA_AppSrc_DOFFSET                              0x000E
    #define     B16AppSrc_DOFFSET                              0x000E
    #define   LSb32AppSrc_DOFFSET                                 16
    #define   LSb16AppSrc_DOFFSET                                 0
    #define       bAppSrc_DOFFSET                              12
    #define   MSK32AppSrc_DOFFSET                                 0x0FFF0000

    #define     BA_AppSrc_Reserved5                            0x000F
    #define     B16AppSrc_Reserved5                            0x000E
    #define   LSb32AppSrc_Reserved5                               28
    #define   LSb16AppSrc_Reserved5                               12
    #define       bAppSrc_Reserved5                            4
    #define   MSK32AppSrc_Reserved5                               0xF0000000

    #define     BA_AppSrc_DBUFSIZE                             0x0010
    #define     B16AppSrc_DBUFSIZE                             0x0010
    #define   LSb32AppSrc_DBUFSIZE                                0
    #define   LSb16AppSrc_DBUFSIZE                                0
    #define       bAppSrc_DBUFSIZE                             12
    #define   MSK32AppSrc_DBUFSIZE                                0x00000FFF

    #define     BA_AppSrc_Reserved6                            0x0011
    #define     B16AppSrc_Reserved6                            0x0010
    #define   LSb32AppSrc_Reserved6                               12
    #define   LSb16AppSrc_Reserved6                               12
    #define       bAppSrc_Reserved6                            4
    #define   MSK32AppSrc_Reserved6                               0x0000F000

    #define     BA_AppSrc_DBUFBASE                             0x0012
    #define     B16AppSrc_DBUFBASE                             0x0012
    #define   LSb32AppSrc_DBUFBASE                                16
    #define   LSb16AppSrc_DBUFBASE                                0
    #define       bAppSrc_DBUFBASE                             16
    #define   MSK32AppSrc_DBUFBASE                                0xFFFF0000

    #define     BA_AppSrc_TAP                                  0x0014
    #define     B16AppSrc_TAP                                  0x0014
    #define   LSb32AppSrc_TAP                                     0
    #define   LSb16AppSrc_TAP                                     0
    #define       bAppSrc_TAP                                  8
    #define   MSK32AppSrc_TAP                                     0x000000FF

    #define     BA_AppSrc_N                                    0x0015
    #define     B16AppSrc_N                                    0x0014
    #define   LSb32AppSrc_N                                       8
    #define   LSb16AppSrc_N                                       8
    #define       bAppSrc_N                                    8
    #define   MSK32AppSrc_N                                       0x0000FF00

    #define     BA_AppSrc_M                                    0x0016
    #define     B16AppSrc_M                                    0x0016
    #define   LSb32AppSrc_M                                       16
    #define   LSb16AppSrc_M                                       0
    #define       bAppSrc_M                                    8
    #define   MSK32AppSrc_M                                       0x00FF0000

    #define     BA_AppSrc_INIT_PHASE                           0x0017
    #define     B16AppSrc_INIT_PHASE                           0x0016
    #define   LSb32AppSrc_INIT_PHASE                              24
    #define   LSb16AppSrc_INIT_PHASE                              8
    #define       bAppSrc_INIT_PHASE                           8
    #define   MSK32AppSrc_INIT_PHASE                              0xFF000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppSrc {
    ///////////////////////////////////////////////////////////
    #define   GET32AppSrc_TYPE(r32)                            _BFGET_(r32, 3, 0)
    #define   SET32AppSrc_TYPE(r32,v)                          _BFSET_(r32, 3, 0,v)
    #define   GET16AppSrc_TYPE(r16)                            _BFGET_(r16, 3, 0)
    #define   SET16AppSrc_TYPE(r16,v)                          _BFSET_(r16, 3, 0,v)

    #define   GET32AppSrc_Reserved0(r32)                       _BFGET_(r32, 4, 4)
    #define   SET32AppSrc_Reserved0(r32,v)                     _BFSET_(r32, 4, 4,v)
    #define   GET16AppSrc_Reserved0(r16)                       _BFGET_(r16, 4, 4)
    #define   SET16AppSrc_Reserved0(r16,v)                     _BFSET_(r16, 4, 4,v)

    #define   GET32AppSrc_SHIFT(r32)                           _BFGET_(r32, 7, 5)
    #define   SET32AppSrc_SHIFT(r32,v)                         _BFSET_(r32, 7, 5,v)
    #define   GET16AppSrc_SHIFT(r16)                           _BFGET_(r16, 7, 5)
    #define   SET16AppSrc_SHIFT(r16,v)                         _BFSET_(r16, 7, 5,v)

    #define   GET32AppSrc_Reserved1(r32)                       _BFGET_(r32,15, 8)
    #define   SET32AppSrc_Reserved1(r32,v)                     _BFSET_(r32,15, 8,v)
    #define   GET16AppSrc_Reserved1(r16)                       _BFGET_(r16,15, 8)
    #define   SET16AppSrc_Reserved1(r16,v)                     _BFSET_(r16,15, 8,v)

    #define   GET32AppSrc_CHANNEL(r32)                         _BFGET_(r32,19,16)
    #define   SET32AppSrc_CHANNEL(r32,v)                       _BFSET_(r32,19,16,v)
    #define   GET16AppSrc_CHANNEL(r16)                         _BFGET_(r16, 3, 0)
    #define   SET16AppSrc_CHANNEL(r16,v)                       _BFSET_(r16, 3, 0,v)

    #define   GET32AppSrc_LENGTH(r32)                          _BFGET_(r32,28,20)
    #define   SET32AppSrc_LENGTH(r32,v)                        _BFSET_(r32,28,20,v)
    #define   GET16AppSrc_LENGTH(r16)                          _BFGET_(r16,12, 4)
    #define   SET16AppSrc_LENGTH(r16,v)                        _BFSET_(r16,12, 4,v)

    #define   GET32AppSrc_Reserved7(r32)                       _BFGET_(r32,31,29)
    #define   SET32AppSrc_Reserved7(r32,v)                     _BFSET_(r32,31,29,v)
    #define   GET16AppSrc_Reserved7(r16)                       _BFGET_(r16,15,13)
    #define   SET16AppSrc_Reserved7(r16,v)                     _BFSET_(r16,15,13,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved0                                 :  1;
            UNSG32 u_SHIFT                                     :  3;
            UNSG32 u_Reserved1                                 :  8;
            UNSG32 u_CHANNEL                                   :  4;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_Reserved7                                 :  3;
    ///////////////////////////////////////////////////////////

    #define   GET32AppSrc_Reserved2(r32)                       _BFGET_(r32,15, 0)
    #define   SET32AppSrc_Reserved2(r32,v)                     _BFSET_(r32,15, 0,v)
    #define   GET16AppSrc_Reserved2(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppSrc_Reserved2(r16,v)                     _BFSET_(r16,15, 0,v)

    #define   GET32AppSrc_COADR(r32)                           _BFGET_(r32,31,16)
    #define   SET32AppSrc_COADR(r32,v)                         _BFSET_(r32,31,16,v)
    #define   GET16AppSrc_COADR(r16)                           _BFGET_(r16,15, 0)
    #define   SET16AppSrc_COADR(r16,v)                         _BFSET_(r16,15, 0,v)

            UNSG32 u_Reserved2                                 : 16;
            UNSG32 u_COADR                                     : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppSrc_SOFFSET(r32)                         _BFGET_(r32,11, 0)
    #define   SET32AppSrc_SOFFSET(r32,v)                       _BFSET_(r32,11, 0,v)
    #define   GET16AppSrc_SOFFSET(r16)                         _BFGET_(r16,11, 0)
    #define   SET16AppSrc_SOFFSET(r16,v)                       _BFSET_(r16,11, 0,v)

    #define   GET32AppSrc_Reserved3(r32)                       _BFGET_(r32,15,12)
    #define   SET32AppSrc_Reserved3(r32,v)                     _BFSET_(r32,15,12,v)
    #define   GET16AppSrc_Reserved3(r16)                       _BFGET_(r16,15,12)
    #define   SET16AppSrc_Reserved3(r16,v)                     _BFSET_(r16,15,12,v)

    #define   GET32AppSrc_SBUFSIZE(r32)                        _BFGET_(r32,27,16)
    #define   SET32AppSrc_SBUFSIZE(r32,v)                      _BFSET_(r32,27,16,v)
    #define   GET16AppSrc_SBUFSIZE(r16)                        _BFGET_(r16,11, 0)
    #define   SET16AppSrc_SBUFSIZE(r16,v)                      _BFSET_(r16,11, 0,v)

    #define   GET32AppSrc_Reserved4(r32)                       _BFGET_(r32,31,28)
    #define   SET32AppSrc_Reserved4(r32,v)                     _BFSET_(r32,31,28,v)
    #define   GET16AppSrc_Reserved4(r16)                       _BFGET_(r16,15,12)
    #define   SET16AppSrc_Reserved4(r16,v)                     _BFSET_(r16,15,12,v)

            UNSG32 u_SOFFSET                                   : 12;
            UNSG32 u_Reserved3                                 :  4;
            UNSG32 u_SBUFSIZE                                  : 12;
            UNSG32 u_Reserved4                                 :  4;
    ///////////////////////////////////////////////////////////

    #define   GET32AppSrc_SBUFBASE(r32)                        _BFGET_(r32,15, 0)
    #define   SET32AppSrc_SBUFBASE(r32,v)                      _BFSET_(r32,15, 0,v)
    #define   GET16AppSrc_SBUFBASE(r16)                        _BFGET_(r16,15, 0)
    #define   SET16AppSrc_SBUFBASE(r16,v)                      _BFSET_(r16,15, 0,v)

    #define   GET32AppSrc_DOFFSET(r32)                         _BFGET_(r32,27,16)
    #define   SET32AppSrc_DOFFSET(r32,v)                       _BFSET_(r32,27,16,v)
    #define   GET16AppSrc_DOFFSET(r16)                         _BFGET_(r16,11, 0)
    #define   SET16AppSrc_DOFFSET(r16,v)                       _BFSET_(r16,11, 0,v)

    #define   GET32AppSrc_Reserved5(r32)                       _BFGET_(r32,31,28)
    #define   SET32AppSrc_Reserved5(r32,v)                     _BFSET_(r32,31,28,v)
    #define   GET16AppSrc_Reserved5(r16)                       _BFGET_(r16,15,12)
    #define   SET16AppSrc_Reserved5(r16,v)                     _BFSET_(r16,15,12,v)

            UNSG32 u_SBUFBASE                                  : 16;
            UNSG32 u_DOFFSET                                   : 12;
            UNSG32 u_Reserved5                                 :  4;
    ///////////////////////////////////////////////////////////

    #define   GET32AppSrc_DBUFSIZE(r32)                        _BFGET_(r32,11, 0)
    #define   SET32AppSrc_DBUFSIZE(r32,v)                      _BFSET_(r32,11, 0,v)
    #define   GET16AppSrc_DBUFSIZE(r16)                        _BFGET_(r16,11, 0)
    #define   SET16AppSrc_DBUFSIZE(r16,v)                      _BFSET_(r16,11, 0,v)

    #define   GET32AppSrc_Reserved6(r32)                       _BFGET_(r32,15,12)
    #define   SET32AppSrc_Reserved6(r32,v)                     _BFSET_(r32,15,12,v)
    #define   GET16AppSrc_Reserved6(r16)                       _BFGET_(r16,15,12)
    #define   SET16AppSrc_Reserved6(r16,v)                     _BFSET_(r16,15,12,v)

    #define   GET32AppSrc_DBUFBASE(r32)                        _BFGET_(r32,31,16)
    #define   SET32AppSrc_DBUFBASE(r32,v)                      _BFSET_(r32,31,16,v)
    #define   GET16AppSrc_DBUFBASE(r16)                        _BFGET_(r16,15, 0)
    #define   SET16AppSrc_DBUFBASE(r16,v)                      _BFSET_(r16,15, 0,v)

            UNSG32 u_DBUFSIZE                                  : 12;
            UNSG32 u_Reserved6                                 :  4;
            UNSG32 u_DBUFBASE                                  : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppSrc_TAP(r32)                             _BFGET_(r32, 7, 0)
    #define   SET32AppSrc_TAP(r32,v)                           _BFSET_(r32, 7, 0,v)
    #define   GET16AppSrc_TAP(r16)                             _BFGET_(r16, 7, 0)
    #define   SET16AppSrc_TAP(r16,v)                           _BFSET_(r16, 7, 0,v)

    #define   GET32AppSrc_N(r32)                               _BFGET_(r32,15, 8)
    #define   SET32AppSrc_N(r32,v)                             _BFSET_(r32,15, 8,v)
    #define   GET16AppSrc_N(r16)                               _BFGET_(r16,15, 8)
    #define   SET16AppSrc_N(r16,v)                             _BFSET_(r16,15, 8,v)

    #define   GET32AppSrc_M(r32)                               _BFGET_(r32,23,16)
    #define   SET32AppSrc_M(r32,v)                             _BFSET_(r32,23,16,v)
    #define   GET16AppSrc_M(r16)                               _BFGET_(r16, 7, 0)
    #define   SET16AppSrc_M(r16,v)                             _BFSET_(r16, 7, 0,v)

    #define   GET32AppSrc_INIT_PHASE(r32)                      _BFGET_(r32,31,24)
    #define   SET32AppSrc_INIT_PHASE(r32,v)                    _BFSET_(r32,31,24,v)
    #define   GET16AppSrc_INIT_PHASE(r16)                      _BFGET_(r16,15, 8)
    #define   SET16AppSrc_INIT_PHASE(r16,v)                    _BFSET_(r16,15, 8,v)

            UNSG32 u_TAP                                       :  8;
            UNSG32 u_N                                         :  8;
            UNSG32 u_M                                         :  8;
            UNSG32 u_INIT_PHASE                                :  8;
    ///////////////////////////////////////////////////////////
    } SIE_AppSrc;

    ///////////////////////////////////////////////////////////
     SIGN32 AppSrc_drvrd(SIE_AppSrc *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppSrc_drvwr(SIE_AppSrc *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppSrc_reset(SIE_AppSrc *p);
     SIGN32 AppSrc_cmp  (SIE_AppSrc *p, SIE_AppSrc *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppSrc_check(p,pie,pfx,hLOG) AppSrc_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppSrc_print(p,    pfx,hLOG) AppSrc_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppSrc
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppFader                biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppFader is 9
///                                    ###
///               %unsigned 1  Reserved0                 
///               %unsigned 3  SHIFT                     
///                                    ###
///                                    * pass to AppMac.SHIFT
///                                    ###
///               %unsigned 8  Reserved1                 
///               %unsigned 4  CHANNEL                   
///                                    ###
///                                    * number of channels to process minus 1
///                                    ###
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of the output audio samples minus 1, in DW
///                                    ###
///               %unsigned 3  Reserved5                 
///               %unsigned 16 Reserved2                 
///               %unsigned 16 COADR                     
///                                    ###
///                                    * Absolute address of the coefficients buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 12 SBUFSIZE                  
///                                    ###
///                                    * Size of source buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved3                 
///               %unsigned 16 SBUFADR                   
///                                    ###
///                                    * Base address of the source buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 12 DBUFSIZE                  
///                                    ###
///                                    * Size of destination buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved4                 
///               %unsigned 16 DBUFADR                   
///                                    ###
///                                    * Base address of the destination buffer in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppFader
#define h_AppFader (){}

    #define     BA_AppFader_TYPE                               0x0000
    #define     B16AppFader_TYPE                               0x0000
    #define   LSb32AppFader_TYPE                                  0
    #define   LSb16AppFader_TYPE                                  0
    #define       bAppFader_TYPE                               4
    #define   MSK32AppFader_TYPE                                  0x0000000F

    #define     BA_AppFader_Reserved0                          0x0000
    #define     B16AppFader_Reserved0                          0x0000
    #define   LSb32AppFader_Reserved0                             4
    #define   LSb16AppFader_Reserved0                             4
    #define       bAppFader_Reserved0                          1
    #define   MSK32AppFader_Reserved0                             0x00000010

    #define     BA_AppFader_SHIFT                              0x0000
    #define     B16AppFader_SHIFT                              0x0000
    #define   LSb32AppFader_SHIFT                                 5
    #define   LSb16AppFader_SHIFT                                 5
    #define       bAppFader_SHIFT                              3
    #define   MSK32AppFader_SHIFT                                 0x000000E0

    #define     BA_AppFader_Reserved1                          0x0001
    #define     B16AppFader_Reserved1                          0x0000
    #define   LSb32AppFader_Reserved1                             8
    #define   LSb16AppFader_Reserved1                             8
    #define       bAppFader_Reserved1                          8
    #define   MSK32AppFader_Reserved1                             0x0000FF00

    #define     BA_AppFader_CHANNEL                            0x0002
    #define     B16AppFader_CHANNEL                            0x0002
    #define   LSb32AppFader_CHANNEL                               16
    #define   LSb16AppFader_CHANNEL                               0
    #define       bAppFader_CHANNEL                            4
    #define   MSK32AppFader_CHANNEL                               0x000F0000

    #define     BA_AppFader_LENGTH                             0x0002
    #define     B16AppFader_LENGTH                             0x0002
    #define   LSb32AppFader_LENGTH                                20
    #define   LSb16AppFader_LENGTH                                4
    #define       bAppFader_LENGTH                             9
    #define   MSK32AppFader_LENGTH                                0x1FF00000

    #define     BA_AppFader_Reserved5                          0x0003
    #define     B16AppFader_Reserved5                          0x0002
    #define   LSb32AppFader_Reserved5                             29
    #define   LSb16AppFader_Reserved5                             13
    #define       bAppFader_Reserved5                          3
    #define   MSK32AppFader_Reserved5                             0xE0000000

    #define     BA_AppFader_Reserved2                          0x0004
    #define     B16AppFader_Reserved2                          0x0004
    #define   LSb32AppFader_Reserved2                             0
    #define   LSb16AppFader_Reserved2                             0
    #define       bAppFader_Reserved2                          16
    #define   MSK32AppFader_Reserved2                             0x0000FFFF

    #define     BA_AppFader_COADR                              0x0006
    #define     B16AppFader_COADR                              0x0006
    #define   LSb32AppFader_COADR                                 16
    #define   LSb16AppFader_COADR                                 0
    #define       bAppFader_COADR                              16
    #define   MSK32AppFader_COADR                                 0xFFFF0000

    #define     BA_AppFader_SBUFSIZE                           0x0008
    #define     B16AppFader_SBUFSIZE                           0x0008
    #define   LSb32AppFader_SBUFSIZE                              0
    #define   LSb16AppFader_SBUFSIZE                              0
    #define       bAppFader_SBUFSIZE                           12
    #define   MSK32AppFader_SBUFSIZE                              0x00000FFF

    #define     BA_AppFader_Reserved3                          0x0009
    #define     B16AppFader_Reserved3                          0x0008
    #define   LSb32AppFader_Reserved3                             12
    #define   LSb16AppFader_Reserved3                             12
    #define       bAppFader_Reserved3                          4
    #define   MSK32AppFader_Reserved3                             0x0000F000

    #define     BA_AppFader_SBUFADR                            0x000A
    #define     B16AppFader_SBUFADR                            0x000A
    #define   LSb32AppFader_SBUFADR                               16
    #define   LSb16AppFader_SBUFADR                               0
    #define       bAppFader_SBUFADR                            16
    #define   MSK32AppFader_SBUFADR                               0xFFFF0000

    #define     BA_AppFader_DBUFSIZE                           0x000C
    #define     B16AppFader_DBUFSIZE                           0x000C
    #define   LSb32AppFader_DBUFSIZE                              0
    #define   LSb16AppFader_DBUFSIZE                              0
    #define       bAppFader_DBUFSIZE                           12
    #define   MSK32AppFader_DBUFSIZE                              0x00000FFF

    #define     BA_AppFader_Reserved4                          0x000D
    #define     B16AppFader_Reserved4                          0x000C
    #define   LSb32AppFader_Reserved4                             12
    #define   LSb16AppFader_Reserved4                             12
    #define       bAppFader_Reserved4                          4
    #define   MSK32AppFader_Reserved4                             0x0000F000

    #define     BA_AppFader_DBUFADR                            0x000E
    #define     B16AppFader_DBUFADR                            0x000E
    #define   LSb32AppFader_DBUFADR                               16
    #define   LSb16AppFader_DBUFADR                               0
    #define       bAppFader_DBUFADR                            16
    #define   MSK32AppFader_DBUFADR                               0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppFader {
    ///////////////////////////////////////////////////////////
    #define   GET32AppFader_TYPE(r32)                          _BFGET_(r32, 3, 0)
    #define   SET32AppFader_TYPE(r32,v)                        _BFSET_(r32, 3, 0,v)
    #define   GET16AppFader_TYPE(r16)                          _BFGET_(r16, 3, 0)
    #define   SET16AppFader_TYPE(r16,v)                        _BFSET_(r16, 3, 0,v)

    #define   GET32AppFader_Reserved0(r32)                     _BFGET_(r32, 4, 4)
    #define   SET32AppFader_Reserved0(r32,v)                   _BFSET_(r32, 4, 4,v)
    #define   GET16AppFader_Reserved0(r16)                     _BFGET_(r16, 4, 4)
    #define   SET16AppFader_Reserved0(r16,v)                   _BFSET_(r16, 4, 4,v)

    #define   GET32AppFader_SHIFT(r32)                         _BFGET_(r32, 7, 5)
    #define   SET32AppFader_SHIFT(r32,v)                       _BFSET_(r32, 7, 5,v)
    #define   GET16AppFader_SHIFT(r16)                         _BFGET_(r16, 7, 5)
    #define   SET16AppFader_SHIFT(r16,v)                       _BFSET_(r16, 7, 5,v)

    #define   GET32AppFader_Reserved1(r32)                     _BFGET_(r32,15, 8)
    #define   SET32AppFader_Reserved1(r32,v)                   _BFSET_(r32,15, 8,v)
    #define   GET16AppFader_Reserved1(r16)                     _BFGET_(r16,15, 8)
    #define   SET16AppFader_Reserved1(r16,v)                   _BFSET_(r16,15, 8,v)

    #define   GET32AppFader_CHANNEL(r32)                       _BFGET_(r32,19,16)
    #define   SET32AppFader_CHANNEL(r32,v)                     _BFSET_(r32,19,16,v)
    #define   GET16AppFader_CHANNEL(r16)                       _BFGET_(r16, 3, 0)
    #define   SET16AppFader_CHANNEL(r16,v)                     _BFSET_(r16, 3, 0,v)

    #define   GET32AppFader_LENGTH(r32)                        _BFGET_(r32,28,20)
    #define   SET32AppFader_LENGTH(r32,v)                      _BFSET_(r32,28,20,v)
    #define   GET16AppFader_LENGTH(r16)                        _BFGET_(r16,12, 4)
    #define   SET16AppFader_LENGTH(r16,v)                      _BFSET_(r16,12, 4,v)

    #define   GET32AppFader_Reserved5(r32)                     _BFGET_(r32,31,29)
    #define   SET32AppFader_Reserved5(r32,v)                   _BFSET_(r32,31,29,v)
    #define   GET16AppFader_Reserved5(r16)                     _BFGET_(r16,15,13)
    #define   SET16AppFader_Reserved5(r16,v)                   _BFSET_(r16,15,13,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved0                                 :  1;
            UNSG32 u_SHIFT                                     :  3;
            UNSG32 u_Reserved1                                 :  8;
            UNSG32 u_CHANNEL                                   :  4;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_Reserved5                                 :  3;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFader_Reserved2(r32)                     _BFGET_(r32,15, 0)
    #define   SET32AppFader_Reserved2(r32,v)                   _BFSET_(r32,15, 0,v)
    #define   GET16AppFader_Reserved2(r16)                     _BFGET_(r16,15, 0)
    #define   SET16AppFader_Reserved2(r16,v)                   _BFSET_(r16,15, 0,v)

    #define   GET32AppFader_COADR(r32)                         _BFGET_(r32,31,16)
    #define   SET32AppFader_COADR(r32,v)                       _BFSET_(r32,31,16,v)
    #define   GET16AppFader_COADR(r16)                         _BFGET_(r16,15, 0)
    #define   SET16AppFader_COADR(r16,v)                       _BFSET_(r16,15, 0,v)

            UNSG32 u_Reserved2                                 : 16;
            UNSG32 u_COADR                                     : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFader_SBUFSIZE(r32)                      _BFGET_(r32,11, 0)
    #define   SET32AppFader_SBUFSIZE(r32,v)                    _BFSET_(r32,11, 0,v)
    #define   GET16AppFader_SBUFSIZE(r16)                      _BFGET_(r16,11, 0)
    #define   SET16AppFader_SBUFSIZE(r16,v)                    _BFSET_(r16,11, 0,v)

    #define   GET32AppFader_Reserved3(r32)                     _BFGET_(r32,15,12)
    #define   SET32AppFader_Reserved3(r32,v)                   _BFSET_(r32,15,12,v)
    #define   GET16AppFader_Reserved3(r16)                     _BFGET_(r16,15,12)
    #define   SET16AppFader_Reserved3(r16,v)                   _BFSET_(r16,15,12,v)

    #define   GET32AppFader_SBUFADR(r32)                       _BFGET_(r32,31,16)
    #define   SET32AppFader_SBUFADR(r32,v)                     _BFSET_(r32,31,16,v)
    #define   GET16AppFader_SBUFADR(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppFader_SBUFADR(r16,v)                     _BFSET_(r16,15, 0,v)

            UNSG32 u_SBUFSIZE                                  : 12;
            UNSG32 u_Reserved3                                 :  4;
            UNSG32 u_SBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppFader_DBUFSIZE(r32)                      _BFGET_(r32,11, 0)
    #define   SET32AppFader_DBUFSIZE(r32,v)                    _BFSET_(r32,11, 0,v)
    #define   GET16AppFader_DBUFSIZE(r16)                      _BFGET_(r16,11, 0)
    #define   SET16AppFader_DBUFSIZE(r16,v)                    _BFSET_(r16,11, 0,v)

    #define   GET32AppFader_Reserved4(r32)                     _BFGET_(r32,15,12)
    #define   SET32AppFader_Reserved4(r32,v)                   _BFSET_(r32,15,12,v)
    #define   GET16AppFader_Reserved4(r16)                     _BFGET_(r16,15,12)
    #define   SET16AppFader_Reserved4(r16,v)                   _BFSET_(r16,15,12,v)

    #define   GET32AppFader_DBUFADR(r32)                       _BFGET_(r32,31,16)
    #define   SET32AppFader_DBUFADR(r32,v)                     _BFSET_(r32,31,16,v)
    #define   GET16AppFader_DBUFADR(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppFader_DBUFADR(r16,v)                     _BFSET_(r16,15, 0,v)

            UNSG32 u_DBUFSIZE                                  : 12;
            UNSG32 u_Reserved4                                 :  4;
            UNSG32 u_DBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppFader;

    ///////////////////////////////////////////////////////////
     SIGN32 AppFader_drvrd(SIE_AppFader *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppFader_drvwr(SIE_AppFader *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppFader_reset(SIE_AppFader *p);
     SIGN32 AppFader_cmp  (SIE_AppFader *p, SIE_AppFader *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppFader_check(p,pie,pfx,hLOG) AppFader_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppFader_print(p,    pfx,hLOG) AppFader_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppFader
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppMixer                biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppMixer is 10
///                                    ###
///               %unsigned 1  LIMIT                     
///                                    ###
///                                    * Apply softer limiter to the output sample
///                                    ###
///               %unsigned 3  SHIFT                     
///                                    ###
///                                    * pass to AppMac.SHIFT
///                                    ###
///               %unsigned 3  Reserved0                 
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of the output audio samples minus 1, in DW
///                                    ###
///               %unsigned 12 DBUFSIZE                  
///                                    ###
///                                    * Size of destination buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 16 DBUFADR                   
///                                    ###
///                                    * Absolute address of the destination buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 16 COADR                     
///                                    ###
///                                    * Absolute address of the coefficients array for source 1 in APP SRAM, in DW
///                                    ###
///               %unsigned 1  MONO                      
///                                    ###
///                                    * 0:Multi channel mix with multi channel
///                                    * 1:Multi channel mix with mono
///                                    ###
///               %unsigned 3  Reserved1                 
///               %unsigned 4  CHANNEL                   
///                                    ###
///                                    * number of channels to process minus 1
///                                    ###
///               %unsigned 12 SBUFSIZE1                 
///                                    ###
///                                    * Size of source buffer 1 for one channel minus 1, in DW
///                                    ###
///               %unsigned 12 SBUFSIZE0                 
///                                    ###
///                                    * Size of source buffer 0 for one channel minus 1, in DW
///                                    ###
///               %unsigned 16 SBUFADR1                  
///                                    ###
///                                    * Absolute address of the source buffer 1 in APP SRAM, in DW
///                                    ###
///               %unsigned 16 SBUFADR0                  
///                                    ###
///                                    * Absolute address of the source buffer 0 in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppMixer
#define h_AppMixer (){}

    #define     BA_AppMixer_TYPE                               0x0000
    #define     B16AppMixer_TYPE                               0x0000
    #define   LSb32AppMixer_TYPE                                  0
    #define   LSb16AppMixer_TYPE                                  0
    #define       bAppMixer_TYPE                               4
    #define   MSK32AppMixer_TYPE                                  0x0000000F

    #define     BA_AppMixer_LIMIT                              0x0000
    #define     B16AppMixer_LIMIT                              0x0000
    #define   LSb32AppMixer_LIMIT                                 4
    #define   LSb16AppMixer_LIMIT                                 4
    #define       bAppMixer_LIMIT                              1
    #define   MSK32AppMixer_LIMIT                                 0x00000010

    #define     BA_AppMixer_SHIFT                              0x0000
    #define     B16AppMixer_SHIFT                              0x0000
    #define   LSb32AppMixer_SHIFT                                 5
    #define   LSb16AppMixer_SHIFT                                 5
    #define       bAppMixer_SHIFT                              3
    #define   MSK32AppMixer_SHIFT                                 0x000000E0

    #define     BA_AppMixer_Reserved0                          0x0001
    #define     B16AppMixer_Reserved0                          0x0000
    #define   LSb32AppMixer_Reserved0                             8
    #define   LSb16AppMixer_Reserved0                             8
    #define       bAppMixer_Reserved0                          3
    #define   MSK32AppMixer_Reserved0                             0x00000700

    #define     BA_AppMixer_LENGTH                             0x0001
    #define     B16AppMixer_LENGTH                             0x0000
    #define   LSb32AppMixer_LENGTH                                11
    #define   LSb16AppMixer_LENGTH                                11
    #define       bAppMixer_LENGTH                             9
    #define   MSK32AppMixer_LENGTH                                0x000FF800

    #define     BA_AppMixer_DBUFSIZE                           0x0002
    #define     B16AppMixer_DBUFSIZE                           0x0002
    #define   LSb32AppMixer_DBUFSIZE                              20
    #define   LSb16AppMixer_DBUFSIZE                              4
    #define       bAppMixer_DBUFSIZE                           12
    #define   MSK32AppMixer_DBUFSIZE                              0xFFF00000

    #define     BA_AppMixer_DBUFADR                            0x0004
    #define     B16AppMixer_DBUFADR                            0x0004
    #define   LSb32AppMixer_DBUFADR                               0
    #define   LSb16AppMixer_DBUFADR                               0
    #define       bAppMixer_DBUFADR                            16
    #define   MSK32AppMixer_DBUFADR                               0x0000FFFF

    #define     BA_AppMixer_COADR                              0x0006
    #define     B16AppMixer_COADR                              0x0006
    #define   LSb32AppMixer_COADR                                 16
    #define   LSb16AppMixer_COADR                                 0
    #define       bAppMixer_COADR                              16
    #define   MSK32AppMixer_COADR                                 0xFFFF0000

    #define     BA_AppMixer_MONO                               0x0008
    #define     B16AppMixer_MONO                               0x0008
    #define   LSb32AppMixer_MONO                                  0
    #define   LSb16AppMixer_MONO                                  0
    #define       bAppMixer_MONO                               1
    #define   MSK32AppMixer_MONO                                  0x00000001

    #define     BA_AppMixer_Reserved1                          0x0008
    #define     B16AppMixer_Reserved1                          0x0008
    #define   LSb32AppMixer_Reserved1                             1
    #define   LSb16AppMixer_Reserved1                             1
    #define       bAppMixer_Reserved1                          3
    #define   MSK32AppMixer_Reserved1                             0x0000000E

    #define     BA_AppMixer_CHANNEL                            0x0008
    #define     B16AppMixer_CHANNEL                            0x0008
    #define   LSb32AppMixer_CHANNEL                               4
    #define   LSb16AppMixer_CHANNEL                               4
    #define       bAppMixer_CHANNEL                            4
    #define   MSK32AppMixer_CHANNEL                               0x000000F0

    #define     BA_AppMixer_SBUFSIZE1                          0x0009
    #define     B16AppMixer_SBUFSIZE1                          0x0008
    #define   LSb32AppMixer_SBUFSIZE1                             8
    #define   LSb16AppMixer_SBUFSIZE1                             8
    #define       bAppMixer_SBUFSIZE1                          12
    #define   MSK32AppMixer_SBUFSIZE1                             0x000FFF00

    #define     BA_AppMixer_SBUFSIZE0                          0x000A
    #define     B16AppMixer_SBUFSIZE0                          0x000A
    #define   LSb32AppMixer_SBUFSIZE0                             20
    #define   LSb16AppMixer_SBUFSIZE0                             4
    #define       bAppMixer_SBUFSIZE0                          12
    #define   MSK32AppMixer_SBUFSIZE0                             0xFFF00000

    #define     BA_AppMixer_SBUFADR1                           0x000C
    #define     B16AppMixer_SBUFADR1                           0x000C
    #define   LSb32AppMixer_SBUFADR1                              0
    #define   LSb16AppMixer_SBUFADR1                              0
    #define       bAppMixer_SBUFADR1                           16
    #define   MSK32AppMixer_SBUFADR1                              0x0000FFFF

    #define     BA_AppMixer_SBUFADR0                           0x000E
    #define     B16AppMixer_SBUFADR0                           0x000E
    #define   LSb32AppMixer_SBUFADR0                              16
    #define   LSb16AppMixer_SBUFADR0                              0
    #define       bAppMixer_SBUFADR0                           16
    #define   MSK32AppMixer_SBUFADR0                              0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppMixer {
    ///////////////////////////////////////////////////////////
    #define   GET32AppMixer_TYPE(r32)                          _BFGET_(r32, 3, 0)
    #define   SET32AppMixer_TYPE(r32,v)                        _BFSET_(r32, 3, 0,v)
    #define   GET16AppMixer_TYPE(r16)                          _BFGET_(r16, 3, 0)
    #define   SET16AppMixer_TYPE(r16,v)                        _BFSET_(r16, 3, 0,v)

    #define   GET32AppMixer_LIMIT(r32)                         _BFGET_(r32, 4, 4)
    #define   SET32AppMixer_LIMIT(r32,v)                       _BFSET_(r32, 4, 4,v)
    #define   GET16AppMixer_LIMIT(r16)                         _BFGET_(r16, 4, 4)
    #define   SET16AppMixer_LIMIT(r16,v)                       _BFSET_(r16, 4, 4,v)

    #define   GET32AppMixer_SHIFT(r32)                         _BFGET_(r32, 7, 5)
    #define   SET32AppMixer_SHIFT(r32,v)                       _BFSET_(r32, 7, 5,v)
    #define   GET16AppMixer_SHIFT(r16)                         _BFGET_(r16, 7, 5)
    #define   SET16AppMixer_SHIFT(r16,v)                       _BFSET_(r16, 7, 5,v)

    #define   GET32AppMixer_Reserved0(r32)                     _BFGET_(r32,10, 8)
    #define   SET32AppMixer_Reserved0(r32,v)                   _BFSET_(r32,10, 8,v)
    #define   GET16AppMixer_Reserved0(r16)                     _BFGET_(r16,10, 8)
    #define   SET16AppMixer_Reserved0(r16,v)                   _BFSET_(r16,10, 8,v)

    #define   GET32AppMixer_LENGTH(r32)                        _BFGET_(r32,19,11)
    #define   SET32AppMixer_LENGTH(r32,v)                      _BFSET_(r32,19,11,v)

    #define   GET32AppMixer_DBUFSIZE(r32)                      _BFGET_(r32,31,20)
    #define   SET32AppMixer_DBUFSIZE(r32,v)                    _BFSET_(r32,31,20,v)
    #define   GET16AppMixer_DBUFSIZE(r16)                      _BFGET_(r16,15, 4)
    #define   SET16AppMixer_DBUFSIZE(r16,v)                    _BFSET_(r16,15, 4,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_LIMIT                                     :  1;
            UNSG32 u_SHIFT                                     :  3;
            UNSG32 u_Reserved0                                 :  3;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_DBUFSIZE                                  : 12;
    ///////////////////////////////////////////////////////////

    #define   GET32AppMixer_DBUFADR(r32)                       _BFGET_(r32,15, 0)
    #define   SET32AppMixer_DBUFADR(r32,v)                     _BFSET_(r32,15, 0,v)
    #define   GET16AppMixer_DBUFADR(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppMixer_DBUFADR(r16,v)                     _BFSET_(r16,15, 0,v)

    #define   GET32AppMixer_COADR(r32)                         _BFGET_(r32,31,16)
    #define   SET32AppMixer_COADR(r32,v)                       _BFSET_(r32,31,16,v)
    #define   GET16AppMixer_COADR(r16)                         _BFGET_(r16,15, 0)
    #define   SET16AppMixer_COADR(r16,v)                       _BFSET_(r16,15, 0,v)

            UNSG32 u_DBUFADR                                   : 16;
            UNSG32 u_COADR                                     : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppMixer_MONO(r32)                          _BFGET_(r32, 0, 0)
    #define   SET32AppMixer_MONO(r32,v)                        _BFSET_(r32, 0, 0,v)
    #define   GET16AppMixer_MONO(r16)                          _BFGET_(r16, 0, 0)
    #define   SET16AppMixer_MONO(r16,v)                        _BFSET_(r16, 0, 0,v)

    #define   GET32AppMixer_Reserved1(r32)                     _BFGET_(r32, 3, 1)
    #define   SET32AppMixer_Reserved1(r32,v)                   _BFSET_(r32, 3, 1,v)
    #define   GET16AppMixer_Reserved1(r16)                     _BFGET_(r16, 3, 1)
    #define   SET16AppMixer_Reserved1(r16,v)                   _BFSET_(r16, 3, 1,v)

    #define   GET32AppMixer_CHANNEL(r32)                       _BFGET_(r32, 7, 4)
    #define   SET32AppMixer_CHANNEL(r32,v)                     _BFSET_(r32, 7, 4,v)
    #define   GET16AppMixer_CHANNEL(r16)                       _BFGET_(r16, 7, 4)
    #define   SET16AppMixer_CHANNEL(r16,v)                     _BFSET_(r16, 7, 4,v)

    #define   GET32AppMixer_SBUFSIZE1(r32)                     _BFGET_(r32,19, 8)
    #define   SET32AppMixer_SBUFSIZE1(r32,v)                   _BFSET_(r32,19, 8,v)

    #define   GET32AppMixer_SBUFSIZE0(r32)                     _BFGET_(r32,31,20)
    #define   SET32AppMixer_SBUFSIZE0(r32,v)                   _BFSET_(r32,31,20,v)
    #define   GET16AppMixer_SBUFSIZE0(r16)                     _BFGET_(r16,15, 4)
    #define   SET16AppMixer_SBUFSIZE0(r16,v)                   _BFSET_(r16,15, 4,v)

            UNSG32 u_MONO                                      :  1;
            UNSG32 u_Reserved1                                 :  3;
            UNSG32 u_CHANNEL                                   :  4;
            UNSG32 u_SBUFSIZE1                                 : 12;
            UNSG32 u_SBUFSIZE0                                 : 12;
    ///////////////////////////////////////////////////////////

    #define   GET32AppMixer_SBUFADR1(r32)                      _BFGET_(r32,15, 0)
    #define   SET32AppMixer_SBUFADR1(r32,v)                    _BFSET_(r32,15, 0,v)
    #define   GET16AppMixer_SBUFADR1(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppMixer_SBUFADR1(r16,v)                    _BFSET_(r16,15, 0,v)

    #define   GET32AppMixer_SBUFADR0(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppMixer_SBUFADR0(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppMixer_SBUFADR0(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppMixer_SBUFADR0(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 u_SBUFADR1                                  : 16;
            UNSG32 u_SBUFADR0                                  : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppMixer;

    ///////////////////////////////////////////////////////////
     SIGN32 AppMixer_drvrd(SIE_AppMixer *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppMixer_drvwr(SIE_AppMixer *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppMixer_reset(SIE_AppMixer *p);
     SIGN32 AppMixer_cmp  (SIE_AppMixer *p, SIE_AppMixer *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppMixer_check(p,pie,pfx,hLOG) AppMixer_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppMixer_print(p,    pfx,hLOG) AppMixer_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppMixer
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppDownMix              biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppDownMix is 11
///                                    ###
///               %unsigned 1  SMOOTH                    
///                                    ###
///                                    * 1: do smooth down mix
///                                    * 0: do normal down mix
///                                    ###
///               %unsigned 3  SHIFT                     
///                                    ###
///                                    * pass to AppMac.SHIFT
///                                    ###
///               %unsigned 5  CHANNELI                  
///                                    ###
///                                    * Number of input channel minus 1
///                                    ###
///               %unsigned 3  Reserved1                 
///               %unsigned 4  CHANNELO                  
///                                    ###
///                                    * number of output channels minus 1
///                                    ###
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of the output audio samples per channel minus 1, in DW
///                                    ###
///               %unsigned 3  Reserved5                 
///               %unsigned 16 DELTAADR                  
///                                    ###
///                                    * Absolute address of the coefficients delta array in APP SRAM, in DW
///                                    * Only used when smooth bit is set.
///                                    ###
///               %unsigned 16 COADR                     
///                                    ###
///                                    * Absolute address of the coefficients array in APP SRAM, in DW
///                                    ###
///               %unsigned 12 SBUFSIZE                  
///                                    ###
///                                    * Size of source buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved3                 
///               %unsigned 16 SBUFADR                   
///                                    ###
///                                    * Absolute address of the source buffer 0 in APP SRAM, in DW
///                                    ###
///               %unsigned 12 DBUFSIZE                  
///                                    ###
///                                    * Size of destination buffer for one channel minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved4                 
///               %unsigned 16 DBUFADR                   
///                                    ###
///                                    * Absolute address of the destination buffer in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppDownMix
#define h_AppDownMix (){}

    #define     BA_AppDownMix_TYPE                             0x0000
    #define     B16AppDownMix_TYPE                             0x0000
    #define   LSb32AppDownMix_TYPE                                0
    #define   LSb16AppDownMix_TYPE                                0
    #define       bAppDownMix_TYPE                             4
    #define   MSK32AppDownMix_TYPE                                0x0000000F

    #define     BA_AppDownMix_SMOOTH                           0x0000
    #define     B16AppDownMix_SMOOTH                           0x0000
    #define   LSb32AppDownMix_SMOOTH                              4
    #define   LSb16AppDownMix_SMOOTH                              4
    #define       bAppDownMix_SMOOTH                           1
    #define   MSK32AppDownMix_SMOOTH                              0x00000010

    #define     BA_AppDownMix_SHIFT                            0x0000
    #define     B16AppDownMix_SHIFT                            0x0000
    #define   LSb32AppDownMix_SHIFT                               5
    #define   LSb16AppDownMix_SHIFT                               5
    #define       bAppDownMix_SHIFT                            3
    #define   MSK32AppDownMix_SHIFT                               0x000000E0

    #define     BA_AppDownMix_CHANNELI                         0x0001
    #define     B16AppDownMix_CHANNELI                         0x0000
    #define   LSb32AppDownMix_CHANNELI                            8
    #define   LSb16AppDownMix_CHANNELI                            8
    #define       bAppDownMix_CHANNELI                         5
    #define   MSK32AppDownMix_CHANNELI                            0x00001F00

    #define     BA_AppDownMix_Reserved1                        0x0001
    #define     B16AppDownMix_Reserved1                        0x0000
    #define   LSb32AppDownMix_Reserved1                           13
    #define   LSb16AppDownMix_Reserved1                           13
    #define       bAppDownMix_Reserved1                        3
    #define   MSK32AppDownMix_Reserved1                           0x0000E000

    #define     BA_AppDownMix_CHANNELO                         0x0002
    #define     B16AppDownMix_CHANNELO                         0x0002
    #define   LSb32AppDownMix_CHANNELO                            16
    #define   LSb16AppDownMix_CHANNELO                            0
    #define       bAppDownMix_CHANNELO                         4
    #define   MSK32AppDownMix_CHANNELO                            0x000F0000

    #define     BA_AppDownMix_LENGTH                           0x0002
    #define     B16AppDownMix_LENGTH                           0x0002
    #define   LSb32AppDownMix_LENGTH                              20
    #define   LSb16AppDownMix_LENGTH                              4
    #define       bAppDownMix_LENGTH                           9
    #define   MSK32AppDownMix_LENGTH                              0x1FF00000

    #define     BA_AppDownMix_Reserved5                        0x0003
    #define     B16AppDownMix_Reserved5                        0x0002
    #define   LSb32AppDownMix_Reserved5                           29
    #define   LSb16AppDownMix_Reserved5                           13
    #define       bAppDownMix_Reserved5                        3
    #define   MSK32AppDownMix_Reserved5                           0xE0000000

    #define     BA_AppDownMix_DELTAADR                         0x0004
    #define     B16AppDownMix_DELTAADR                         0x0004
    #define   LSb32AppDownMix_DELTAADR                            0
    #define   LSb16AppDownMix_DELTAADR                            0
    #define       bAppDownMix_DELTAADR                         16
    #define   MSK32AppDownMix_DELTAADR                            0x0000FFFF

    #define     BA_AppDownMix_COADR                            0x0006
    #define     B16AppDownMix_COADR                            0x0006
    #define   LSb32AppDownMix_COADR                               16
    #define   LSb16AppDownMix_COADR                               0
    #define       bAppDownMix_COADR                            16
    #define   MSK32AppDownMix_COADR                               0xFFFF0000

    #define     BA_AppDownMix_SBUFSIZE                         0x0008
    #define     B16AppDownMix_SBUFSIZE                         0x0008
    #define   LSb32AppDownMix_SBUFSIZE                            0
    #define   LSb16AppDownMix_SBUFSIZE                            0
    #define       bAppDownMix_SBUFSIZE                         12
    #define   MSK32AppDownMix_SBUFSIZE                            0x00000FFF

    #define     BA_AppDownMix_Reserved3                        0x0009
    #define     B16AppDownMix_Reserved3                        0x0008
    #define   LSb32AppDownMix_Reserved3                           12
    #define   LSb16AppDownMix_Reserved3                           12
    #define       bAppDownMix_Reserved3                        4
    #define   MSK32AppDownMix_Reserved3                           0x0000F000

    #define     BA_AppDownMix_SBUFADR                          0x000A
    #define     B16AppDownMix_SBUFADR                          0x000A
    #define   LSb32AppDownMix_SBUFADR                             16
    #define   LSb16AppDownMix_SBUFADR                             0
    #define       bAppDownMix_SBUFADR                          16
    #define   MSK32AppDownMix_SBUFADR                             0xFFFF0000

    #define     BA_AppDownMix_DBUFSIZE                         0x000C
    #define     B16AppDownMix_DBUFSIZE                         0x000C
    #define   LSb32AppDownMix_DBUFSIZE                            0
    #define   LSb16AppDownMix_DBUFSIZE                            0
    #define       bAppDownMix_DBUFSIZE                         12
    #define   MSK32AppDownMix_DBUFSIZE                            0x00000FFF

    #define     BA_AppDownMix_Reserved4                        0x000D
    #define     B16AppDownMix_Reserved4                        0x000C
    #define   LSb32AppDownMix_Reserved4                           12
    #define   LSb16AppDownMix_Reserved4                           12
    #define       bAppDownMix_Reserved4                        4
    #define   MSK32AppDownMix_Reserved4                           0x0000F000

    #define     BA_AppDownMix_DBUFADR                          0x000E
    #define     B16AppDownMix_DBUFADR                          0x000E
    #define   LSb32AppDownMix_DBUFADR                             16
    #define   LSb16AppDownMix_DBUFADR                             0
    #define       bAppDownMix_DBUFADR                          16
    #define   MSK32AppDownMix_DBUFADR                             0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppDownMix {
    ///////////////////////////////////////////////////////////
    #define   GET32AppDownMix_TYPE(r32)                        _BFGET_(r32, 3, 0)
    #define   SET32AppDownMix_TYPE(r32,v)                      _BFSET_(r32, 3, 0,v)
    #define   GET16AppDownMix_TYPE(r16)                        _BFGET_(r16, 3, 0)
    #define   SET16AppDownMix_TYPE(r16,v)                      _BFSET_(r16, 3, 0,v)

    #define   GET32AppDownMix_SMOOTH(r32)                      _BFGET_(r32, 4, 4)
    #define   SET32AppDownMix_SMOOTH(r32,v)                    _BFSET_(r32, 4, 4,v)
    #define   GET16AppDownMix_SMOOTH(r16)                      _BFGET_(r16, 4, 4)
    #define   SET16AppDownMix_SMOOTH(r16,v)                    _BFSET_(r16, 4, 4,v)

    #define   GET32AppDownMix_SHIFT(r32)                       _BFGET_(r32, 7, 5)
    #define   SET32AppDownMix_SHIFT(r32,v)                     _BFSET_(r32, 7, 5,v)
    #define   GET16AppDownMix_SHIFT(r16)                       _BFGET_(r16, 7, 5)
    #define   SET16AppDownMix_SHIFT(r16,v)                     _BFSET_(r16, 7, 5,v)

    #define   GET32AppDownMix_CHANNELI(r32)                    _BFGET_(r32,12, 8)
    #define   SET32AppDownMix_CHANNELI(r32,v)                  _BFSET_(r32,12, 8,v)
    #define   GET16AppDownMix_CHANNELI(r16)                    _BFGET_(r16,12, 8)
    #define   SET16AppDownMix_CHANNELI(r16,v)                  _BFSET_(r16,12, 8,v)

    #define   GET32AppDownMix_Reserved1(r32)                   _BFGET_(r32,15,13)
    #define   SET32AppDownMix_Reserved1(r32,v)                 _BFSET_(r32,15,13,v)
    #define   GET16AppDownMix_Reserved1(r16)                   _BFGET_(r16,15,13)
    #define   SET16AppDownMix_Reserved1(r16,v)                 _BFSET_(r16,15,13,v)

    #define   GET32AppDownMix_CHANNELO(r32)                    _BFGET_(r32,19,16)
    #define   SET32AppDownMix_CHANNELO(r32,v)                  _BFSET_(r32,19,16,v)
    #define   GET16AppDownMix_CHANNELO(r16)                    _BFGET_(r16, 3, 0)
    #define   SET16AppDownMix_CHANNELO(r16,v)                  _BFSET_(r16, 3, 0,v)

    #define   GET32AppDownMix_LENGTH(r32)                      _BFGET_(r32,28,20)
    #define   SET32AppDownMix_LENGTH(r32,v)                    _BFSET_(r32,28,20,v)
    #define   GET16AppDownMix_LENGTH(r16)                      _BFGET_(r16,12, 4)
    #define   SET16AppDownMix_LENGTH(r16,v)                    _BFSET_(r16,12, 4,v)

    #define   GET32AppDownMix_Reserved5(r32)                   _BFGET_(r32,31,29)
    #define   SET32AppDownMix_Reserved5(r32,v)                 _BFSET_(r32,31,29,v)
    #define   GET16AppDownMix_Reserved5(r16)                   _BFGET_(r16,15,13)
    #define   SET16AppDownMix_Reserved5(r16,v)                 _BFSET_(r16,15,13,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_SMOOTH                                    :  1;
            UNSG32 u_SHIFT                                     :  3;
            UNSG32 u_CHANNELI                                  :  5;
            UNSG32 u_Reserved1                                 :  3;
            UNSG32 u_CHANNELO                                  :  4;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_Reserved5                                 :  3;
    ///////////////////////////////////////////////////////////

    #define   GET32AppDownMix_DELTAADR(r32)                    _BFGET_(r32,15, 0)
    #define   SET32AppDownMix_DELTAADR(r32,v)                  _BFSET_(r32,15, 0,v)
    #define   GET16AppDownMix_DELTAADR(r16)                    _BFGET_(r16,15, 0)
    #define   SET16AppDownMix_DELTAADR(r16,v)                  _BFSET_(r16,15, 0,v)

    #define   GET32AppDownMix_COADR(r32)                       _BFGET_(r32,31,16)
    #define   SET32AppDownMix_COADR(r32,v)                     _BFSET_(r32,31,16,v)
    #define   GET16AppDownMix_COADR(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppDownMix_COADR(r16,v)                     _BFSET_(r16,15, 0,v)

            UNSG32 u_DELTAADR                                  : 16;
            UNSG32 u_COADR                                     : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppDownMix_SBUFSIZE(r32)                    _BFGET_(r32,11, 0)
    #define   SET32AppDownMix_SBUFSIZE(r32,v)                  _BFSET_(r32,11, 0,v)
    #define   GET16AppDownMix_SBUFSIZE(r16)                    _BFGET_(r16,11, 0)
    #define   SET16AppDownMix_SBUFSIZE(r16,v)                  _BFSET_(r16,11, 0,v)

    #define   GET32AppDownMix_Reserved3(r32)                   _BFGET_(r32,15,12)
    #define   SET32AppDownMix_Reserved3(r32,v)                 _BFSET_(r32,15,12,v)
    #define   GET16AppDownMix_Reserved3(r16)                   _BFGET_(r16,15,12)
    #define   SET16AppDownMix_Reserved3(r16,v)                 _BFSET_(r16,15,12,v)

    #define   GET32AppDownMix_SBUFADR(r32)                     _BFGET_(r32,31,16)
    #define   SET32AppDownMix_SBUFADR(r32,v)                   _BFSET_(r32,31,16,v)
    #define   GET16AppDownMix_SBUFADR(r16)                     _BFGET_(r16,15, 0)
    #define   SET16AppDownMix_SBUFADR(r16,v)                   _BFSET_(r16,15, 0,v)

            UNSG32 u_SBUFSIZE                                  : 12;
            UNSG32 u_Reserved3                                 :  4;
            UNSG32 u_SBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppDownMix_DBUFSIZE(r32)                    _BFGET_(r32,11, 0)
    #define   SET32AppDownMix_DBUFSIZE(r32,v)                  _BFSET_(r32,11, 0,v)
    #define   GET16AppDownMix_DBUFSIZE(r16)                    _BFGET_(r16,11, 0)
    #define   SET16AppDownMix_DBUFSIZE(r16,v)                  _BFSET_(r16,11, 0,v)

    #define   GET32AppDownMix_Reserved4(r32)                   _BFGET_(r32,15,12)
    #define   SET32AppDownMix_Reserved4(r32,v)                 _BFSET_(r32,15,12,v)
    #define   GET16AppDownMix_Reserved4(r16)                   _BFGET_(r16,15,12)
    #define   SET16AppDownMix_Reserved4(r16,v)                 _BFSET_(r16,15,12,v)

    #define   GET32AppDownMix_DBUFADR(r32)                     _BFGET_(r32,31,16)
    #define   SET32AppDownMix_DBUFADR(r32,v)                   _BFSET_(r32,31,16,v)
    #define   GET16AppDownMix_DBUFADR(r16)                     _BFGET_(r16,15, 0)
    #define   SET16AppDownMix_DBUFADR(r16,v)                   _BFSET_(r16,15, 0,v)

            UNSG32 u_DBUFSIZE                                  : 12;
            UNSG32 u_Reserved4                                 :  4;
            UNSG32 u_DBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppDownMix;

    ///////////////////////////////////////////////////////////
     SIGN32 AppDownMix_drvrd(SIE_AppDownMix *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppDownMix_drvwr(SIE_AppDownMix *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppDownMix_reset(SIE_AppDownMix *p);
     SIGN32 AppDownMix_cmp  (SIE_AppDownMix *p, SIE_AppDownMix *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppDownMix_check(p,pie,pfx,hLOG) AppDownMix_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppDownMix_print(p,    pfx,hLOG) AppDownMix_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppDownMix
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppEq                   biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppEq is 12
///                                    ###
///               %unsigned 3  SHIFTF                    
///                                    ###
///                                    * SHIFT for filter sum
///                                    ###
///               %unsigned 5  BAND                      
///                                    ###
///                                    * Number of band minus 1
///                                    ###
///               %unsigned 4  TAP                       
///                                    ###
///                                    * Number of IIR filter tap minus 1. Value of TAP should range from 0 to 14, 15 is not supported.
///                                    ###
///               %unsigned 4  CHANNEL                   
///                                    ###
///                                    * number of channels to process minus 1
///                                    ###
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of the output audio samples to be processed minus 1, in DW
///                                    ###
///               %unsigned 3  SHIFTG                    
///                                    ###
///                                    * SHIFT for gain sum
///                                    ###
///               %unsigned 16 GAINADR                   
///                                    ###
///                                    * Absolute address of the gain array in APP SRAM, in DW
///                                    ###
///               %unsigned 16 FLTRADR                   
///                                    ###
///                                    * Absolute address of the filter coefficients in APP SRAM, in DW
///                                    ###
///               %unsigned 16 HISTADR                   
///                                    ###
///                                    * Absolute address of the history data in APP SRAM, in DW
///                                    ###
///               %unsigned 16 SBUFADR                   
///                                    ###
///                                    * Absolute address of the source buffer in APP SRAM, in DW
///                                    ###
///               %unsigned 16 MAXBADR                   
///                                    ###
///                                    * Absolute address of the maxim value of each band in APP SRAM, in DW
///                                    ###
///               %unsigned 16 DBUFADR                   
///                                    ###
///                                    * Absolute address of the destination buffer in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppEq
#define h_AppEq (){}

    #define     BA_AppEq_TYPE                                  0x0000
    #define     B16AppEq_TYPE                                  0x0000
    #define   LSb32AppEq_TYPE                                     0
    #define   LSb16AppEq_TYPE                                     0
    #define       bAppEq_TYPE                                  4
    #define   MSK32AppEq_TYPE                                     0x0000000F

    #define     BA_AppEq_SHIFTF                                0x0000
    #define     B16AppEq_SHIFTF                                0x0000
    #define   LSb32AppEq_SHIFTF                                   4
    #define   LSb16AppEq_SHIFTF                                   4
    #define       bAppEq_SHIFTF                                3
    #define   MSK32AppEq_SHIFTF                                   0x00000070

    #define     BA_AppEq_BAND                                  0x0000
    #define     B16AppEq_BAND                                  0x0000
    #define   LSb32AppEq_BAND                                     7
    #define   LSb16AppEq_BAND                                     7
    #define       bAppEq_BAND                                  5
    #define   MSK32AppEq_BAND                                     0x00000F80

    #define     BA_AppEq_TAP                                   0x0001
    #define     B16AppEq_TAP                                   0x0000
    #define   LSb32AppEq_TAP                                      12
    #define   LSb16AppEq_TAP                                      12
    #define       bAppEq_TAP                                   4
    #define   MSK32AppEq_TAP                                      0x0000F000

    #define     BA_AppEq_CHANNEL                               0x0002
    #define     B16AppEq_CHANNEL                               0x0002
    #define   LSb32AppEq_CHANNEL                                  16
    #define   LSb16AppEq_CHANNEL                                  0
    #define       bAppEq_CHANNEL                               4
    #define   MSK32AppEq_CHANNEL                                  0x000F0000

    #define     BA_AppEq_LENGTH                                0x0002
    #define     B16AppEq_LENGTH                                0x0002
    #define   LSb32AppEq_LENGTH                                   20
    #define   LSb16AppEq_LENGTH                                   4
    #define       bAppEq_LENGTH                                9
    #define   MSK32AppEq_LENGTH                                   0x1FF00000

    #define     BA_AppEq_SHIFTG                                0x0003
    #define     B16AppEq_SHIFTG                                0x0002
    #define   LSb32AppEq_SHIFTG                                   29
    #define   LSb16AppEq_SHIFTG                                   13
    #define       bAppEq_SHIFTG                                3
    #define   MSK32AppEq_SHIFTG                                   0xE0000000

    #define     BA_AppEq_GAINADR                               0x0004
    #define     B16AppEq_GAINADR                               0x0004
    #define   LSb32AppEq_GAINADR                                  0
    #define   LSb16AppEq_GAINADR                                  0
    #define       bAppEq_GAINADR                               16
    #define   MSK32AppEq_GAINADR                                  0x0000FFFF

    #define     BA_AppEq_FLTRADR                               0x0006
    #define     B16AppEq_FLTRADR                               0x0006
    #define   LSb32AppEq_FLTRADR                                  16
    #define   LSb16AppEq_FLTRADR                                  0
    #define       bAppEq_FLTRADR                               16
    #define   MSK32AppEq_FLTRADR                                  0xFFFF0000

    #define     BA_AppEq_HISTADR                               0x0008
    #define     B16AppEq_HISTADR                               0x0008
    #define   LSb32AppEq_HISTADR                                  0
    #define   LSb16AppEq_HISTADR                                  0
    #define       bAppEq_HISTADR                               16
    #define   MSK32AppEq_HISTADR                                  0x0000FFFF

    #define     BA_AppEq_SBUFADR                               0x000A
    #define     B16AppEq_SBUFADR                               0x000A
    #define   LSb32AppEq_SBUFADR                                  16
    #define   LSb16AppEq_SBUFADR                                  0
    #define       bAppEq_SBUFADR                               16
    #define   MSK32AppEq_SBUFADR                                  0xFFFF0000

    #define     BA_AppEq_MAXBADR                               0x000C
    #define     B16AppEq_MAXBADR                               0x000C
    #define   LSb32AppEq_MAXBADR                                  0
    #define   LSb16AppEq_MAXBADR                                  0
    #define       bAppEq_MAXBADR                               16
    #define   MSK32AppEq_MAXBADR                                  0x0000FFFF

    #define     BA_AppEq_DBUFADR                               0x000E
    #define     B16AppEq_DBUFADR                               0x000E
    #define   LSb32AppEq_DBUFADR                                  16
    #define   LSb16AppEq_DBUFADR                                  0
    #define       bAppEq_DBUFADR                               16
    #define   MSK32AppEq_DBUFADR                                  0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppEq {
    ///////////////////////////////////////////////////////////
    #define   GET32AppEq_TYPE(r32)                             _BFGET_(r32, 3, 0)
    #define   SET32AppEq_TYPE(r32,v)                           _BFSET_(r32, 3, 0,v)
    #define   GET16AppEq_TYPE(r16)                             _BFGET_(r16, 3, 0)
    #define   SET16AppEq_TYPE(r16,v)                           _BFSET_(r16, 3, 0,v)

    #define   GET32AppEq_SHIFTF(r32)                           _BFGET_(r32, 6, 4)
    #define   SET32AppEq_SHIFTF(r32,v)                         _BFSET_(r32, 6, 4,v)
    #define   GET16AppEq_SHIFTF(r16)                           _BFGET_(r16, 6, 4)
    #define   SET16AppEq_SHIFTF(r16,v)                         _BFSET_(r16, 6, 4,v)

    #define   GET32AppEq_BAND(r32)                             _BFGET_(r32,11, 7)
    #define   SET32AppEq_BAND(r32,v)                           _BFSET_(r32,11, 7,v)
    #define   GET16AppEq_BAND(r16)                             _BFGET_(r16,11, 7)
    #define   SET16AppEq_BAND(r16,v)                           _BFSET_(r16,11, 7,v)

    #define   GET32AppEq_TAP(r32)                              _BFGET_(r32,15,12)
    #define   SET32AppEq_TAP(r32,v)                            _BFSET_(r32,15,12,v)
    #define   GET16AppEq_TAP(r16)                              _BFGET_(r16,15,12)
    #define   SET16AppEq_TAP(r16,v)                            _BFSET_(r16,15,12,v)

    #define   GET32AppEq_CHANNEL(r32)                          _BFGET_(r32,19,16)
    #define   SET32AppEq_CHANNEL(r32,v)                        _BFSET_(r32,19,16,v)
    #define   GET16AppEq_CHANNEL(r16)                          _BFGET_(r16, 3, 0)
    #define   SET16AppEq_CHANNEL(r16,v)                        _BFSET_(r16, 3, 0,v)

    #define   GET32AppEq_LENGTH(r32)                           _BFGET_(r32,28,20)
    #define   SET32AppEq_LENGTH(r32,v)                         _BFSET_(r32,28,20,v)
    #define   GET16AppEq_LENGTH(r16)                           _BFGET_(r16,12, 4)
    #define   SET16AppEq_LENGTH(r16,v)                         _BFSET_(r16,12, 4,v)

    #define   GET32AppEq_SHIFTG(r32)                           _BFGET_(r32,31,29)
    #define   SET32AppEq_SHIFTG(r32,v)                         _BFSET_(r32,31,29,v)
    #define   GET16AppEq_SHIFTG(r16)                           _BFGET_(r16,15,13)
    #define   SET16AppEq_SHIFTG(r16,v)                         _BFSET_(r16,15,13,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_SHIFTF                                    :  3;
            UNSG32 u_BAND                                      :  5;
            UNSG32 u_TAP                                       :  4;
            UNSG32 u_CHANNEL                                   :  4;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_SHIFTG                                    :  3;
    ///////////////////////////////////////////////////////////

    #define   GET32AppEq_GAINADR(r32)                          _BFGET_(r32,15, 0)
    #define   SET32AppEq_GAINADR(r32,v)                        _BFSET_(r32,15, 0,v)
    #define   GET16AppEq_GAINADR(r16)                          _BFGET_(r16,15, 0)
    #define   SET16AppEq_GAINADR(r16,v)                        _BFSET_(r16,15, 0,v)

    #define   GET32AppEq_FLTRADR(r32)                          _BFGET_(r32,31,16)
    #define   SET32AppEq_FLTRADR(r32,v)                        _BFSET_(r32,31,16,v)
    #define   GET16AppEq_FLTRADR(r16)                          _BFGET_(r16,15, 0)
    #define   SET16AppEq_FLTRADR(r16,v)                        _BFSET_(r16,15, 0,v)

            UNSG32 u_GAINADR                                   : 16;
            UNSG32 u_FLTRADR                                   : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppEq_HISTADR(r32)                          _BFGET_(r32,15, 0)
    #define   SET32AppEq_HISTADR(r32,v)                        _BFSET_(r32,15, 0,v)
    #define   GET16AppEq_HISTADR(r16)                          _BFGET_(r16,15, 0)
    #define   SET16AppEq_HISTADR(r16,v)                        _BFSET_(r16,15, 0,v)

    #define   GET32AppEq_SBUFADR(r32)                          _BFGET_(r32,31,16)
    #define   SET32AppEq_SBUFADR(r32,v)                        _BFSET_(r32,31,16,v)
    #define   GET16AppEq_SBUFADR(r16)                          _BFGET_(r16,15, 0)
    #define   SET16AppEq_SBUFADR(r16,v)                        _BFSET_(r16,15, 0,v)

            UNSG32 u_HISTADR                                   : 16;
            UNSG32 u_SBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppEq_MAXBADR(r32)                          _BFGET_(r32,15, 0)
    #define   SET32AppEq_MAXBADR(r32,v)                        _BFSET_(r32,15, 0,v)
    #define   GET16AppEq_MAXBADR(r16)                          _BFGET_(r16,15, 0)
    #define   SET16AppEq_MAXBADR(r16,v)                        _BFSET_(r16,15, 0,v)

    #define   GET32AppEq_DBUFADR(r32)                          _BFGET_(r32,31,16)
    #define   SET32AppEq_DBUFADR(r32,v)                        _BFSET_(r32,31,16,v)
    #define   GET16AppEq_DBUFADR(r16)                          _BFGET_(r16,15, 0)
    #define   SET16AppEq_DBUFADR(r16,v)                        _BFSET_(r16,15, 0,v)

            UNSG32 u_MAXBADR                                   : 16;
            UNSG32 u_DBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppEq;

    ///////////////////////////////////////////////////////////
     SIGN32 AppEq_drvrd(SIE_AppEq *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppEq_drvwr(SIE_AppEq *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppEq_reset(SIE_AppEq *p);
     SIGN32 AppEq_cmp  (SIE_AppEq *p, SIE_AppEq *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppEq_check(p,pie,pfx,hLOG) AppEq_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppEq_print(p,    pfx,hLOG) AppEq_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppEq
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppInterleave           biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppInterleave is 13
///                                    ###
///               %unsigned 3  Reserved0                 
///               %unsigned 9  LENGTH                    
///                                    ###
///                                    * Number of the input audio samples per source minus 1, in DW
///                                    ###
///               %unsigned 16 SBUFADR1                  
///                                    ###
///                                    * Absolute address of the source buffer one in APP SRAM, in DW
///                                    ###
///               %unsigned 16 SBUFADR0                  
///                                    ###
///                                    * Absolute address of the source buffer zero in APP SRAM, in DW
///                                    ###
///               %unsigned 16 DBUFADR                   
///                                    ###
///                                    * Absolute address of the destination buffer in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppInterleave
#define h_AppInterleave (){}

    #define     BA_AppInterleave_TYPE                          0x0000
    #define     B16AppInterleave_TYPE                          0x0000
    #define   LSb32AppInterleave_TYPE                             0
    #define   LSb16AppInterleave_TYPE                             0
    #define       bAppInterleave_TYPE                          4
    #define   MSK32AppInterleave_TYPE                             0x0000000F

    #define     BA_AppInterleave_Reserved0                     0x0000
    #define     B16AppInterleave_Reserved0                     0x0000
    #define   LSb32AppInterleave_Reserved0                        4
    #define   LSb16AppInterleave_Reserved0                        4
    #define       bAppInterleave_Reserved0                     3
    #define   MSK32AppInterleave_Reserved0                        0x00000070

    #define     BA_AppInterleave_LENGTH                        0x0000
    #define     B16AppInterleave_LENGTH                        0x0000
    #define   LSb32AppInterleave_LENGTH                           7
    #define   LSb16AppInterleave_LENGTH                           7
    #define       bAppInterleave_LENGTH                        9
    #define   MSK32AppInterleave_LENGTH                           0x0000FF80

    #define     BA_AppInterleave_SBUFADR1                      0x0002
    #define     B16AppInterleave_SBUFADR1                      0x0002
    #define   LSb32AppInterleave_SBUFADR1                         16
    #define   LSb16AppInterleave_SBUFADR1                         0
    #define       bAppInterleave_SBUFADR1                      16
    #define   MSK32AppInterleave_SBUFADR1                         0xFFFF0000

    #define     BA_AppInterleave_SBUFADR0                      0x0004
    #define     B16AppInterleave_SBUFADR0                      0x0004
    #define   LSb32AppInterleave_SBUFADR0                         0
    #define   LSb16AppInterleave_SBUFADR0                         0
    #define       bAppInterleave_SBUFADR0                      16
    #define   MSK32AppInterleave_SBUFADR0                         0x0000FFFF

    #define     BA_AppInterleave_DBUFADR                       0x0006
    #define     B16AppInterleave_DBUFADR                       0x0006
    #define   LSb32AppInterleave_DBUFADR                          16
    #define   LSb16AppInterleave_DBUFADR                          0
    #define       bAppInterleave_DBUFADR                       16
    #define   MSK32AppInterleave_DBUFADR                          0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppInterleave {
    ///////////////////////////////////////////////////////////
    #define   GET32AppInterleave_TYPE(r32)                     _BFGET_(r32, 3, 0)
    #define   SET32AppInterleave_TYPE(r32,v)                   _BFSET_(r32, 3, 0,v)
    #define   GET16AppInterleave_TYPE(r16)                     _BFGET_(r16, 3, 0)
    #define   SET16AppInterleave_TYPE(r16,v)                   _BFSET_(r16, 3, 0,v)

    #define   GET32AppInterleave_Reserved0(r32)                _BFGET_(r32, 6, 4)
    #define   SET32AppInterleave_Reserved0(r32,v)              _BFSET_(r32, 6, 4,v)
    #define   GET16AppInterleave_Reserved0(r16)                _BFGET_(r16, 6, 4)
    #define   SET16AppInterleave_Reserved0(r16,v)              _BFSET_(r16, 6, 4,v)

    #define   GET32AppInterleave_LENGTH(r32)                   _BFGET_(r32,15, 7)
    #define   SET32AppInterleave_LENGTH(r32,v)                 _BFSET_(r32,15, 7,v)
    #define   GET16AppInterleave_LENGTH(r16)                   _BFGET_(r16,15, 7)
    #define   SET16AppInterleave_LENGTH(r16,v)                 _BFSET_(r16,15, 7,v)

    #define   GET32AppInterleave_SBUFADR1(r32)                 _BFGET_(r32,31,16)
    #define   SET32AppInterleave_SBUFADR1(r32,v)               _BFSET_(r32,31,16,v)
    #define   GET16AppInterleave_SBUFADR1(r16)                 _BFGET_(r16,15, 0)
    #define   SET16AppInterleave_SBUFADR1(r16,v)               _BFSET_(r16,15, 0,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved0                                 :  3;
            UNSG32 u_LENGTH                                    :  9;
            UNSG32 u_SBUFADR1                                  : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppInterleave_SBUFADR0(r32)                 _BFGET_(r32,15, 0)
    #define   SET32AppInterleave_SBUFADR0(r32,v)               _BFSET_(r32,15, 0,v)
    #define   GET16AppInterleave_SBUFADR0(r16)                 _BFGET_(r16,15, 0)
    #define   SET16AppInterleave_SBUFADR0(r16,v)               _BFSET_(r16,15, 0,v)

    #define   GET32AppInterleave_DBUFADR(r32)                  _BFGET_(r32,31,16)
    #define   SET32AppInterleave_DBUFADR(r32,v)                _BFSET_(r32,31,16,v)
    #define   GET16AppInterleave_DBUFADR(r16)                  _BFGET_(r16,15, 0)
    #define   SET16AppInterleave_DBUFADR(r16,v)                _BFSET_(r16,15, 0,v)

            UNSG32 u_SBUFADR0                                  : 16;
            UNSG32 u_DBUFADR                                   : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppInterleave;

    ///////////////////////////////////////////////////////////
     SIGN32 AppInterleave_drvrd(SIE_AppInterleave *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppInterleave_drvwr(SIE_AppInterleave *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppInterleave_reset(SIE_AppInterleave *p);
     SIGN32 AppInterleave_cmp  (SIE_AppInterleave *p, SIE_AppInterleave *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppInterleave_check(p,pie,pfx,hLOG) AppInterleave_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppInterleave_print(p,    pfx,hLOG) AppInterleave_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppInterleave
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppMacs                 biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppMacs is 15
///                                    ###
///               %unsigned 1  Reserved                  
///               %unsigned 3  SHIFT                     
///                                    ###
///                                    * pass to AppMac.SHIFT
///                                    ###
///               %unsigned 2  MACTYPE                   
///                                    ###
///                                    * pass to AppMac.TYPE
///                                    ###
///               %unsigned 2  Reserved0                 
///               %unsigned 1  ASUM1ST                   
///                                    ###
///                                    * Pass to AppMac.ASUM of the first AppMac generated
///                                    ###
///               %unsigned 1  ASUM                      
///                                    ###
///                                    * Pass to AppMac.ASUM of all the AppMac generated except for the first one.
///                                    ###
///               %unsigned 1  SSUMLST                   
///                                    ###
///                                    * Pass to AppMac.SSUM of the last AppMac generated
///                                    ###
///               %unsigned 1  SSUM                      
///                                    ###
///                                    * Pass to AppMac.SSUM of all the AppMac generated except for the last one.
///                                    ###
///               %unsigned 12 LENGTH                    
///                                    ###
///                                    * Total number of AppMac to be generated minus 1
///                                    ###
///               %unsigned 4  Reserved1                 
///               %signed   16 SADRINC1                  
///                                    ###
///                                    * Source 1 address increment. Can be a negative number
///                                    ###
///               %unsigned 16 SADRINIT1                 
///                                    ###
///                                    * Initial source 1 address
///                                    ###
///               %signed   16 SADRINC0                  
///                                    ###
///                                    * Source 0 address increment. Can be a negative number
///                                    ###
///               %unsigned 16 SADRINIT0                 
///                                    ###
///                                    * Initial source 0 address
///                                    ###
///               %signed   16 DADRINC                   
///                                    ###
///                                    * Destination address increment. Can be a negative number
///                                    ###
///               %unsigned 16 DADRINIT                  
///                                    ###
///                                    * Initial destination address
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppMacs
#define h_AppMacs (){}

    #define     BA_AppMacs_TYPE                                0x0000
    #define     B16AppMacs_TYPE                                0x0000
    #define   LSb32AppMacs_TYPE                                   0
    #define   LSb16AppMacs_TYPE                                   0
    #define       bAppMacs_TYPE                                4
    #define   MSK32AppMacs_TYPE                                   0x0000000F

    #define     BA_AppMacs_Reserved                            0x0000
    #define     B16AppMacs_Reserved                            0x0000
    #define   LSb32AppMacs_Reserved                               4
    #define   LSb16AppMacs_Reserved                               4
    #define       bAppMacs_Reserved                            1
    #define   MSK32AppMacs_Reserved                               0x00000010

    #define     BA_AppMacs_SHIFT                               0x0000
    #define     B16AppMacs_SHIFT                               0x0000
    #define   LSb32AppMacs_SHIFT                                  5
    #define   LSb16AppMacs_SHIFT                                  5
    #define       bAppMacs_SHIFT                               3
    #define   MSK32AppMacs_SHIFT                                  0x000000E0

    #define     BA_AppMacs_MACTYPE                             0x0001
    #define     B16AppMacs_MACTYPE                             0x0000
    #define   LSb32AppMacs_MACTYPE                                8
    #define   LSb16AppMacs_MACTYPE                                8
    #define       bAppMacs_MACTYPE                             2
    #define   MSK32AppMacs_MACTYPE                                0x00000300

    #define     BA_AppMacs_Reserved0                           0x0001
    #define     B16AppMacs_Reserved0                           0x0000
    #define   LSb32AppMacs_Reserved0                              10
    #define   LSb16AppMacs_Reserved0                              10
    #define       bAppMacs_Reserved0                           2
    #define   MSK32AppMacs_Reserved0                              0x00000C00

    #define     BA_AppMacs_ASUM1ST                             0x0001
    #define     B16AppMacs_ASUM1ST                             0x0000
    #define   LSb32AppMacs_ASUM1ST                                12
    #define   LSb16AppMacs_ASUM1ST                                12
    #define       bAppMacs_ASUM1ST                             1
    #define   MSK32AppMacs_ASUM1ST                                0x00001000

    #define     BA_AppMacs_ASUM                                0x0001
    #define     B16AppMacs_ASUM                                0x0000
    #define   LSb32AppMacs_ASUM                                   13
    #define   LSb16AppMacs_ASUM                                   13
    #define       bAppMacs_ASUM                                1
    #define   MSK32AppMacs_ASUM                                   0x00002000

    #define     BA_AppMacs_SSUMLST                             0x0001
    #define     B16AppMacs_SSUMLST                             0x0000
    #define   LSb32AppMacs_SSUMLST                                14
    #define   LSb16AppMacs_SSUMLST                                14
    #define       bAppMacs_SSUMLST                             1
    #define   MSK32AppMacs_SSUMLST                                0x00004000

    #define     BA_AppMacs_SSUM                                0x0001
    #define     B16AppMacs_SSUM                                0x0000
    #define   LSb32AppMacs_SSUM                                   15
    #define   LSb16AppMacs_SSUM                                   15
    #define       bAppMacs_SSUM                                1
    #define   MSK32AppMacs_SSUM                                   0x00008000

    #define     BA_AppMacs_LENGTH                              0x0002
    #define     B16AppMacs_LENGTH                              0x0002
    #define   LSb32AppMacs_LENGTH                                 16
    #define   LSb16AppMacs_LENGTH                                 0
    #define       bAppMacs_LENGTH                              12
    #define   MSK32AppMacs_LENGTH                                 0x0FFF0000

    #define     BA_AppMacs_Reserved1                           0x0003
    #define     B16AppMacs_Reserved1                           0x0002
    #define   LSb32AppMacs_Reserved1                              28
    #define   LSb16AppMacs_Reserved1                              12
    #define       bAppMacs_Reserved1                           4
    #define   MSK32AppMacs_Reserved1                              0xF0000000

    #define     BA_AppMacs_SADRINC1                            0x0004
    #define     B16AppMacs_SADRINC1                            0x0004
    #define   LSb32AppMacs_SADRINC1                               0
    #define   LSb16AppMacs_SADRINC1                               0
    #define       bAppMacs_SADRINC1                            16
    #define   MSK32AppMacs_SADRINC1                               0x0000FFFF

    #define     BA_AppMacs_SADRINIT1                           0x0006
    #define     B16AppMacs_SADRINIT1                           0x0006
    #define   LSb32AppMacs_SADRINIT1                              16
    #define   LSb16AppMacs_SADRINIT1                              0
    #define       bAppMacs_SADRINIT1                           16
    #define   MSK32AppMacs_SADRINIT1                              0xFFFF0000

    #define     BA_AppMacs_SADRINC0                            0x0008
    #define     B16AppMacs_SADRINC0                            0x0008
    #define   LSb32AppMacs_SADRINC0                               0
    #define   LSb16AppMacs_SADRINC0                               0
    #define       bAppMacs_SADRINC0                            16
    #define   MSK32AppMacs_SADRINC0                               0x0000FFFF

    #define     BA_AppMacs_SADRINIT0                           0x000A
    #define     B16AppMacs_SADRINIT0                           0x000A
    #define   LSb32AppMacs_SADRINIT0                              16
    #define   LSb16AppMacs_SADRINIT0                              0
    #define       bAppMacs_SADRINIT0                           16
    #define   MSK32AppMacs_SADRINIT0                              0xFFFF0000

    #define     BA_AppMacs_DADRINC                             0x000C
    #define     B16AppMacs_DADRINC                             0x000C
    #define   LSb32AppMacs_DADRINC                                0
    #define   LSb16AppMacs_DADRINC                                0
    #define       bAppMacs_DADRINC                             16
    #define   MSK32AppMacs_DADRINC                                0x0000FFFF

    #define     BA_AppMacs_DADRINIT                            0x000E
    #define     B16AppMacs_DADRINIT                            0x000E
    #define   LSb32AppMacs_DADRINIT                               16
    #define   LSb16AppMacs_DADRINIT                               0
    #define       bAppMacs_DADRINIT                            16
    #define   MSK32AppMacs_DADRINIT                               0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppMacs {
    ///////////////////////////////////////////////////////////
    #define   GET32AppMacs_TYPE(r32)                           _BFGET_(r32, 3, 0)
    #define   SET32AppMacs_TYPE(r32,v)                         _BFSET_(r32, 3, 0,v)
    #define   GET16AppMacs_TYPE(r16)                           _BFGET_(r16, 3, 0)
    #define   SET16AppMacs_TYPE(r16,v)                         _BFSET_(r16, 3, 0,v)

    #define   GET32AppMacs_Reserved(r32)                       _BFGET_(r32, 4, 4)
    #define   SET32AppMacs_Reserved(r32,v)                     _BFSET_(r32, 4, 4,v)
    #define   GET16AppMacs_Reserved(r16)                       _BFGET_(r16, 4, 4)
    #define   SET16AppMacs_Reserved(r16,v)                     _BFSET_(r16, 4, 4,v)

    #define   GET32AppMacs_SHIFT(r32)                          _BFGET_(r32, 7, 5)
    #define   SET32AppMacs_SHIFT(r32,v)                        _BFSET_(r32, 7, 5,v)
    #define   GET16AppMacs_SHIFT(r16)                          _BFGET_(r16, 7, 5)
    #define   SET16AppMacs_SHIFT(r16,v)                        _BFSET_(r16, 7, 5,v)

    #define   GET32AppMacs_MACTYPE(r32)                        _BFGET_(r32, 9, 8)
    #define   SET32AppMacs_MACTYPE(r32,v)                      _BFSET_(r32, 9, 8,v)
    #define   GET16AppMacs_MACTYPE(r16)                        _BFGET_(r16, 9, 8)
    #define   SET16AppMacs_MACTYPE(r16,v)                      _BFSET_(r16, 9, 8,v)

    #define   GET32AppMacs_Reserved0(r32)                      _BFGET_(r32,11,10)
    #define   SET32AppMacs_Reserved0(r32,v)                    _BFSET_(r32,11,10,v)
    #define   GET16AppMacs_Reserved0(r16)                      _BFGET_(r16,11,10)
    #define   SET16AppMacs_Reserved0(r16,v)                    _BFSET_(r16,11,10,v)

    #define   GET32AppMacs_ASUM1ST(r32)                        _BFGET_(r32,12,12)
    #define   SET32AppMacs_ASUM1ST(r32,v)                      _BFSET_(r32,12,12,v)
    #define   GET16AppMacs_ASUM1ST(r16)                        _BFGET_(r16,12,12)
    #define   SET16AppMacs_ASUM1ST(r16,v)                      _BFSET_(r16,12,12,v)

    #define   GET32AppMacs_ASUM(r32)                           _BFGET_(r32,13,13)
    #define   SET32AppMacs_ASUM(r32,v)                         _BFSET_(r32,13,13,v)
    #define   GET16AppMacs_ASUM(r16)                           _BFGET_(r16,13,13)
    #define   SET16AppMacs_ASUM(r16,v)                         _BFSET_(r16,13,13,v)

    #define   GET32AppMacs_SSUMLST(r32)                        _BFGET_(r32,14,14)
    #define   SET32AppMacs_SSUMLST(r32,v)                      _BFSET_(r32,14,14,v)
    #define   GET16AppMacs_SSUMLST(r16)                        _BFGET_(r16,14,14)
    #define   SET16AppMacs_SSUMLST(r16,v)                      _BFSET_(r16,14,14,v)

    #define   GET32AppMacs_SSUM(r32)                           _BFGET_(r32,15,15)
    #define   SET32AppMacs_SSUM(r32,v)                         _BFSET_(r32,15,15,v)
    #define   GET16AppMacs_SSUM(r16)                           _BFGET_(r16,15,15)
    #define   SET16AppMacs_SSUM(r16,v)                         _BFSET_(r16,15,15,v)

    #define   GET32AppMacs_LENGTH(r32)                         _BFGET_(r32,27,16)
    #define   SET32AppMacs_LENGTH(r32,v)                       _BFSET_(r32,27,16,v)
    #define   GET16AppMacs_LENGTH(r16)                         _BFGET_(r16,11, 0)
    #define   SET16AppMacs_LENGTH(r16,v)                       _BFSET_(r16,11, 0,v)

    #define   GET32AppMacs_Reserved1(r32)                      _BFGET_(r32,31,28)
    #define   SET32AppMacs_Reserved1(r32,v)                    _BFSET_(r32,31,28,v)
    #define   GET16AppMacs_Reserved1(r16)                      _BFGET_(r16,15,12)
    #define   SET16AppMacs_Reserved1(r16,v)                    _BFSET_(r16,15,12,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved                                  :  1;
            UNSG32 u_SHIFT                                     :  3;
            UNSG32 u_MACTYPE                                   :  2;
            UNSG32 u_Reserved0                                 :  2;
            UNSG32 u_ASUM1ST                                   :  1;
            UNSG32 u_ASUM                                      :  1;
            UNSG32 u_SSUMLST                                   :  1;
            UNSG32 u_SSUM                                      :  1;
            UNSG32 u_LENGTH                                    : 12;
            UNSG32 u_Reserved1                                 :  4;
    ///////////////////////////////////////////////////////////

    #define   GET32AppMacs_SADRINC1(r32)                       _BFGET_(r32,15, 0)
    #define   SET32AppMacs_SADRINC1(r32,v)                     _BFSET_(r32,15, 0,v)
    #define   GET16AppMacs_SADRINC1(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppMacs_SADRINC1(r16,v)                     _BFSET_(r16,15, 0,v)

    #define   GET32AppMacs_SADRINIT1(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppMacs_SADRINIT1(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppMacs_SADRINIT1(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppMacs_SADRINIT1(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 s_SADRINC1                                  : 16;
            UNSG32 u_SADRINIT1                                 : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppMacs_SADRINC0(r32)                       _BFGET_(r32,15, 0)
    #define   SET32AppMacs_SADRINC0(r32,v)                     _BFSET_(r32,15, 0,v)
    #define   GET16AppMacs_SADRINC0(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppMacs_SADRINC0(r16,v)                     _BFSET_(r16,15, 0,v)

    #define   GET32AppMacs_SADRINIT0(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppMacs_SADRINIT0(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppMacs_SADRINIT0(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppMacs_SADRINIT0(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 s_SADRINC0                                  : 16;
            UNSG32 u_SADRINIT0                                 : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32AppMacs_DADRINC(r32)                        _BFGET_(r32,15, 0)
    #define   SET32AppMacs_DADRINC(r32,v)                      _BFSET_(r32,15, 0,v)
    #define   GET16AppMacs_DADRINC(r16)                        _BFGET_(r16,15, 0)
    #define   SET16AppMacs_DADRINC(r16,v)                      _BFSET_(r16,15, 0,v)

    #define   GET32AppMacs_DADRINIT(r32)                       _BFGET_(r32,31,16)
    #define   SET32AppMacs_DADRINIT(r32,v)                     _BFSET_(r32,31,16,v)
    #define   GET16AppMacs_DADRINIT(r16)                       _BFGET_(r16,15, 0)
    #define   SET16AppMacs_DADRINIT(r16,v)                     _BFSET_(r16,15, 0,v)

            UNSG32 s_DADRINC                                   : 16;
            UNSG32 u_DADRINIT                                  : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppMacs;

    ///////////////////////////////////////////////////////////
     SIGN32 AppMacs_drvrd(SIE_AppMacs *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppMacs_drvwr(SIE_AppMacs *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppMacs_reset(SIE_AppMacs *p);
     SIGN32 AppMacs_cmp  (SIE_AppMacs *p, SIE_AppMacs *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppMacs_check(p,pie,pfx,hLOG) AppMacs_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppMacs_print(p,    pfx,hLOG) AppMacs_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppMacs
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppExeSram              biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  TYPE                      
///                                    ###
///                                    * TYPE of AppExeSram is 4
///                                    ###
///               %unsigned 28 Reserved0                 
///               %unsigned 12 CMDSIZE                   
///                                    ###
///                                    * Size of APP commands in SRAM minus 1, in DW
///                                    ###
///               %unsigned 4  Reserved1                 
///               %unsigned 16 CMDADR                    
///                                    ###
///                                    * Address of the APP commands in APP SRAM, in DW
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppExeSram
#define h_AppExeSram (){}

    #define     BA_AppExeSram_TYPE                             0x0000
    #define     B16AppExeSram_TYPE                             0x0000
    #define   LSb32AppExeSram_TYPE                                0
    #define   LSb16AppExeSram_TYPE                                0
    #define       bAppExeSram_TYPE                             4
    #define   MSK32AppExeSram_TYPE                                0x0000000F

    #define     BA_AppExeSram_Reserved0                        0x0000
    #define     B16AppExeSram_Reserved0                        0x0000
    #define   LSb32AppExeSram_Reserved0                           4
    #define   LSb16AppExeSram_Reserved0                           4
    #define       bAppExeSram_Reserved0                        28
    #define   MSK32AppExeSram_Reserved0                           0xFFFFFFF0

    #define     BA_AppExeSram_CMDSIZE                          0x0004
    #define     B16AppExeSram_CMDSIZE                          0x0004
    #define   LSb32AppExeSram_CMDSIZE                             0
    #define   LSb16AppExeSram_CMDSIZE                             0
    #define       bAppExeSram_CMDSIZE                          12
    #define   MSK32AppExeSram_CMDSIZE                             0x00000FFF

    #define     BA_AppExeSram_Reserved1                        0x0005
    #define     B16AppExeSram_Reserved1                        0x0004
    #define   LSb32AppExeSram_Reserved1                           12
    #define   LSb16AppExeSram_Reserved1                           12
    #define       bAppExeSram_Reserved1                        4
    #define   MSK32AppExeSram_Reserved1                           0x0000F000

    #define     BA_AppExeSram_CMDADR                           0x0006
    #define     B16AppExeSram_CMDADR                           0x0006
    #define   LSb32AppExeSram_CMDADR                              16
    #define   LSb16AppExeSram_CMDADR                              0
    #define       bAppExeSram_CMDADR                           16
    #define   MSK32AppExeSram_CMDADR                              0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppExeSram {
    ///////////////////////////////////////////////////////////
    #define   GET32AppExeSram_TYPE(r32)                        _BFGET_(r32, 3, 0)
    #define   SET32AppExeSram_TYPE(r32,v)                      _BFSET_(r32, 3, 0,v)
    #define   GET16AppExeSram_TYPE(r16)                        _BFGET_(r16, 3, 0)
    #define   SET16AppExeSram_TYPE(r16,v)                      _BFSET_(r16, 3, 0,v)

    #define   GET32AppExeSram_Reserved0(r32)                   _BFGET_(r32,31, 4)
    #define   SET32AppExeSram_Reserved0(r32,v)                 _BFSET_(r32,31, 4,v)

            UNSG32 u_TYPE                                      :  4;
            UNSG32 u_Reserved0                                 : 28;
    ///////////////////////////////////////////////////////////

    #define   GET32AppExeSram_CMDSIZE(r32)                     _BFGET_(r32,11, 0)
    #define   SET32AppExeSram_CMDSIZE(r32,v)                   _BFSET_(r32,11, 0,v)
    #define   GET16AppExeSram_CMDSIZE(r16)                     _BFGET_(r16,11, 0)
    #define   SET16AppExeSram_CMDSIZE(r16,v)                   _BFSET_(r16,11, 0,v)

    #define   GET32AppExeSram_Reserved1(r32)                   _BFGET_(r32,15,12)
    #define   SET32AppExeSram_Reserved1(r32,v)                 _BFSET_(r32,15,12,v)
    #define   GET16AppExeSram_Reserved1(r16)                   _BFGET_(r16,15,12)
    #define   SET16AppExeSram_Reserved1(r16,v)                 _BFSET_(r16,15,12,v)

    #define   GET32AppExeSram_CMDADR(r32)                      _BFGET_(r32,31,16)
    #define   SET32AppExeSram_CMDADR(r32,v)                    _BFSET_(r32,31,16,v)
    #define   GET16AppExeSram_CMDADR(r16)                      _BFGET_(r16,15, 0)
    #define   SET16AppExeSram_CMDADR(r16,v)                    _BFSET_(r16,15, 0,v)

            UNSG32 u_CMDSIZE                                   : 12;
            UNSG32 u_Reserved1                                 :  4;
            UNSG32 u_CMDADR                                    : 16;
    ///////////////////////////////////////////////////////////
    } SIE_AppExeSram;

    ///////////////////////////////////////////////////////////
     SIGN32 AppExeSram_drvrd(SIE_AppExeSram *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppExeSram_drvwr(SIE_AppExeSram *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppExeSram_reset(SIE_AppExeSram *p);
     SIGN32 AppExeSram_cmp  (SIE_AppExeSram *p, SIE_AppExeSram *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppExeSram_check(p,pie,pfx,hLOG) AppExeSram_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppExeSram_print(p,    pfx,hLOG) AppExeSram_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppExeSram
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ADAC_ctrl               biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 1  DAC_EN                    0x0
///                                    ###
///                                    * Audio DAC enable bit. This bit controls the analog section of audio DAC.
///                                    * DAC_EN = '0': DAC is powered down;
///                                    * DAC_EN = '1': DAC is powered up.
///                                    ###
///               %unsigned 1  MODE_SEL                  0x0
///                                    ###
///                                    * I2S mode select bit. See I2S timing diagram for details.
///                                    * MODE_SEL = '0': Mode 0 is chosen;
///                                    * MODE_SEL = '1' : Mode 1 is selected.
///                                    ###
///               %unsigned 1  RESET                     0x1
///                                    ###
///                                    * Reset bit for audio DAC logic. Active high.
///                                    ###
///               %unsigned 1  SE_EN                     0x0
///                                    ###
///                                    * Single-ended output mode enable bit.
///                                    ###
///               %unsigned 1  CP_EN                     0x0
///                                    ###
///                                    * Charge pump power up enable bit.
///                                    ###
///               %unsigned 2  OSR                       0x0
///                                    ###
///                                    * Oversample ratio of DAC, defined as MODCLK/LRCK
///                                    ###
///               %unsigned 3  TEST_SEL                  0x0
///                                    ###
///                                    * Select the analog test signal
///                                    ###
///               %unsigned 1  TEST_EN                   0x0
///                                    ###
///                                    * Enable test signals
///                                    ###
///               %unsigned 1  EN_TEST_ADAC              0x0
///                                    ###
///                                    * Audio DAC test enable
///                                    ###
///               %unsigned 2  CP_FREQ_SEL               0x0
///                                    ###
///                                    * program the charge pump clock
///                                    ###
///               %unsigned 2  CHOP_FREQ_SEL             0x0
///                                    ###
///                                    * program the chopper clock
///                                    ###
///               %%        16         # Stuffing bits...
///               %unsigned 20 DAC_RSVD_IN               0x2006
///                                    ###
///                                    * Reserved for DAC analog test purpose.
///                                    ###
///               %unsigned 1  TEST_MODE                 0x0
///                                    ###
///                                    * Test mode register
///                                    ###
///               %%        11         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      37b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ADAC_ctrl
#define h_ADAC_ctrl (){}

    #define     BA_ADAC_ctrl_DAC_EN                            0x0000
    #define     B16ADAC_ctrl_DAC_EN                            0x0000
    #define   LSb32ADAC_ctrl_DAC_EN                               0
    #define   LSb16ADAC_ctrl_DAC_EN                               0
    #define       bADAC_ctrl_DAC_EN                            1
    #define   MSK32ADAC_ctrl_DAC_EN                               0x00000001

    #define     BA_ADAC_ctrl_MODE_SEL                          0x0000
    #define     B16ADAC_ctrl_MODE_SEL                          0x0000
    #define   LSb32ADAC_ctrl_MODE_SEL                             1
    #define   LSb16ADAC_ctrl_MODE_SEL                             1
    #define       bADAC_ctrl_MODE_SEL                          1
    #define   MSK32ADAC_ctrl_MODE_SEL                             0x00000002

    #define     BA_ADAC_ctrl_RESET                             0x0000
    #define     B16ADAC_ctrl_RESET                             0x0000
    #define   LSb32ADAC_ctrl_RESET                                2
    #define   LSb16ADAC_ctrl_RESET                                2
    #define       bADAC_ctrl_RESET                             1
    #define   MSK32ADAC_ctrl_RESET                                0x00000004

    #define     BA_ADAC_ctrl_SE_EN                             0x0000
    #define     B16ADAC_ctrl_SE_EN                             0x0000
    #define   LSb32ADAC_ctrl_SE_EN                                3
    #define   LSb16ADAC_ctrl_SE_EN                                3
    #define       bADAC_ctrl_SE_EN                             1
    #define   MSK32ADAC_ctrl_SE_EN                                0x00000008

    #define     BA_ADAC_ctrl_CP_EN                             0x0000
    #define     B16ADAC_ctrl_CP_EN                             0x0000
    #define   LSb32ADAC_ctrl_CP_EN                                4
    #define   LSb16ADAC_ctrl_CP_EN                                4
    #define       bADAC_ctrl_CP_EN                             1
    #define   MSK32ADAC_ctrl_CP_EN                                0x00000010

    #define     BA_ADAC_ctrl_OSR                               0x0000
    #define     B16ADAC_ctrl_OSR                               0x0000
    #define   LSb32ADAC_ctrl_OSR                                  5
    #define   LSb16ADAC_ctrl_OSR                                  5
    #define       bADAC_ctrl_OSR                               2
    #define   MSK32ADAC_ctrl_OSR                                  0x00000060

    #define     BA_ADAC_ctrl_TEST_SEL                          0x0000
    #define     B16ADAC_ctrl_TEST_SEL                          0x0000
    #define   LSb32ADAC_ctrl_TEST_SEL                             7
    #define   LSb16ADAC_ctrl_TEST_SEL                             7
    #define       bADAC_ctrl_TEST_SEL                          3
    #define   MSK32ADAC_ctrl_TEST_SEL                             0x00000380

    #define     BA_ADAC_ctrl_TEST_EN                           0x0001
    #define     B16ADAC_ctrl_TEST_EN                           0x0000
    #define   LSb32ADAC_ctrl_TEST_EN                              10
    #define   LSb16ADAC_ctrl_TEST_EN                              10
    #define       bADAC_ctrl_TEST_EN                           1
    #define   MSK32ADAC_ctrl_TEST_EN                              0x00000400

    #define     BA_ADAC_ctrl_EN_TEST_ADAC                      0x0001
    #define     B16ADAC_ctrl_EN_TEST_ADAC                      0x0000
    #define   LSb32ADAC_ctrl_EN_TEST_ADAC                         11
    #define   LSb16ADAC_ctrl_EN_TEST_ADAC                         11
    #define       bADAC_ctrl_EN_TEST_ADAC                      1
    #define   MSK32ADAC_ctrl_EN_TEST_ADAC                         0x00000800

    #define     BA_ADAC_ctrl_CP_FREQ_SEL                       0x0001
    #define     B16ADAC_ctrl_CP_FREQ_SEL                       0x0000
    #define   LSb32ADAC_ctrl_CP_FREQ_SEL                          12
    #define   LSb16ADAC_ctrl_CP_FREQ_SEL                          12
    #define       bADAC_ctrl_CP_FREQ_SEL                       2
    #define   MSK32ADAC_ctrl_CP_FREQ_SEL                          0x00003000

    #define     BA_ADAC_ctrl_CHOP_FREQ_SEL                     0x0001
    #define     B16ADAC_ctrl_CHOP_FREQ_SEL                     0x0000
    #define   LSb32ADAC_ctrl_CHOP_FREQ_SEL                        14
    #define   LSb16ADAC_ctrl_CHOP_FREQ_SEL                        14
    #define       bADAC_ctrl_CHOP_FREQ_SEL                     2
    #define   MSK32ADAC_ctrl_CHOP_FREQ_SEL                        0x0000C000

    #define     BA_ADAC_ctrl_DAC_RSVD_IN                       0x0004
    #define     B16ADAC_ctrl_DAC_RSVD_IN                       0x0004
    #define   LSb32ADAC_ctrl_DAC_RSVD_IN                          0
    #define   LSb16ADAC_ctrl_DAC_RSVD_IN                          0
    #define       bADAC_ctrl_DAC_RSVD_IN                       20
    #define   MSK32ADAC_ctrl_DAC_RSVD_IN                          0x000FFFFF

    #define     BA_ADAC_ctrl_TEST_MODE                         0x0006
    #define     B16ADAC_ctrl_TEST_MODE                         0x0006
    #define   LSb32ADAC_ctrl_TEST_MODE                            20
    #define   LSb16ADAC_ctrl_TEST_MODE                            4
    #define       bADAC_ctrl_TEST_MODE                         1
    #define   MSK32ADAC_ctrl_TEST_MODE                            0x00100000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ADAC_ctrl {
    ///////////////////////////////////////////////////////////
    #define   GET32ADAC_ctrl_DAC_EN(r32)                       _BFGET_(r32, 0, 0)
    #define   SET32ADAC_ctrl_DAC_EN(r32,v)                     _BFSET_(r32, 0, 0,v)
    #define   GET16ADAC_ctrl_DAC_EN(r16)                       _BFGET_(r16, 0, 0)
    #define   SET16ADAC_ctrl_DAC_EN(r16,v)                     _BFSET_(r16, 0, 0,v)

    #define   GET32ADAC_ctrl_MODE_SEL(r32)                     _BFGET_(r32, 1, 1)
    #define   SET32ADAC_ctrl_MODE_SEL(r32,v)                   _BFSET_(r32, 1, 1,v)
    #define   GET16ADAC_ctrl_MODE_SEL(r16)                     _BFGET_(r16, 1, 1)
    #define   SET16ADAC_ctrl_MODE_SEL(r16,v)                   _BFSET_(r16, 1, 1,v)

    #define   GET32ADAC_ctrl_RESET(r32)                        _BFGET_(r32, 2, 2)
    #define   SET32ADAC_ctrl_RESET(r32,v)                      _BFSET_(r32, 2, 2,v)
    #define   GET16ADAC_ctrl_RESET(r16)                        _BFGET_(r16, 2, 2)
    #define   SET16ADAC_ctrl_RESET(r16,v)                      _BFSET_(r16, 2, 2,v)

    #define   GET32ADAC_ctrl_SE_EN(r32)                        _BFGET_(r32, 3, 3)
    #define   SET32ADAC_ctrl_SE_EN(r32,v)                      _BFSET_(r32, 3, 3,v)
    #define   GET16ADAC_ctrl_SE_EN(r16)                        _BFGET_(r16, 3, 3)
    #define   SET16ADAC_ctrl_SE_EN(r16,v)                      _BFSET_(r16, 3, 3,v)

    #define   GET32ADAC_ctrl_CP_EN(r32)                        _BFGET_(r32, 4, 4)
    #define   SET32ADAC_ctrl_CP_EN(r32,v)                      _BFSET_(r32, 4, 4,v)
    #define   GET16ADAC_ctrl_CP_EN(r16)                        _BFGET_(r16, 4, 4)
    #define   SET16ADAC_ctrl_CP_EN(r16,v)                      _BFSET_(r16, 4, 4,v)

    #define   GET32ADAC_ctrl_OSR(r32)                          _BFGET_(r32, 6, 5)
    #define   SET32ADAC_ctrl_OSR(r32,v)                        _BFSET_(r32, 6, 5,v)
    #define   GET16ADAC_ctrl_OSR(r16)                          _BFGET_(r16, 6, 5)
    #define   SET16ADAC_ctrl_OSR(r16,v)                        _BFSET_(r16, 6, 5,v)

    #define   GET32ADAC_ctrl_TEST_SEL(r32)                     _BFGET_(r32, 9, 7)
    #define   SET32ADAC_ctrl_TEST_SEL(r32,v)                   _BFSET_(r32, 9, 7,v)
    #define   GET16ADAC_ctrl_TEST_SEL(r16)                     _BFGET_(r16, 9, 7)
    #define   SET16ADAC_ctrl_TEST_SEL(r16,v)                   _BFSET_(r16, 9, 7,v)

    #define   GET32ADAC_ctrl_TEST_EN(r32)                      _BFGET_(r32,10,10)
    #define   SET32ADAC_ctrl_TEST_EN(r32,v)                    _BFSET_(r32,10,10,v)
    #define   GET16ADAC_ctrl_TEST_EN(r16)                      _BFGET_(r16,10,10)
    #define   SET16ADAC_ctrl_TEST_EN(r16,v)                    _BFSET_(r16,10,10,v)

    #define   GET32ADAC_ctrl_EN_TEST_ADAC(r32)                 _BFGET_(r32,11,11)
    #define   SET32ADAC_ctrl_EN_TEST_ADAC(r32,v)               _BFSET_(r32,11,11,v)
    #define   GET16ADAC_ctrl_EN_TEST_ADAC(r16)                 _BFGET_(r16,11,11)
    #define   SET16ADAC_ctrl_EN_TEST_ADAC(r16,v)               _BFSET_(r16,11,11,v)

    #define   GET32ADAC_ctrl_CP_FREQ_SEL(r32)                  _BFGET_(r32,13,12)
    #define   SET32ADAC_ctrl_CP_FREQ_SEL(r32,v)                _BFSET_(r32,13,12,v)
    #define   GET16ADAC_ctrl_CP_FREQ_SEL(r16)                  _BFGET_(r16,13,12)
    #define   SET16ADAC_ctrl_CP_FREQ_SEL(r16,v)                _BFSET_(r16,13,12,v)

    #define   GET32ADAC_ctrl_CHOP_FREQ_SEL(r32)                _BFGET_(r32,15,14)
    #define   SET32ADAC_ctrl_CHOP_FREQ_SEL(r32,v)              _BFSET_(r32,15,14,v)
    #define   GET16ADAC_ctrl_CHOP_FREQ_SEL(r16)                _BFGET_(r16,15,14)
    #define   SET16ADAC_ctrl_CHOP_FREQ_SEL(r16,v)              _BFSET_(r16,15,14,v)

            UNSG32 u_DAC_EN                                    :  1;
            UNSG32 u_MODE_SEL                                  :  1;
            UNSG32 u_RESET                                     :  1;
            UNSG32 u_SE_EN                                     :  1;
            UNSG32 u_CP_EN                                     :  1;
            UNSG32 u_OSR                                       :  2;
            UNSG32 u_TEST_SEL                                  :  3;
            UNSG32 u_TEST_EN                                   :  1;
            UNSG32 u_EN_TEST_ADAC                              :  1;
            UNSG32 u_CP_FREQ_SEL                               :  2;
            UNSG32 u_CHOP_FREQ_SEL                             :  2;
            UNSG32 RSVDx0_b16                                  : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32ADAC_ctrl_DAC_RSVD_IN(r32)                  _BFGET_(r32,19, 0)
    #define   SET32ADAC_ctrl_DAC_RSVD_IN(r32,v)                _BFSET_(r32,19, 0,v)

    #define   GET32ADAC_ctrl_TEST_MODE(r32)                    _BFGET_(r32,20,20)
    #define   SET32ADAC_ctrl_TEST_MODE(r32,v)                  _BFSET_(r32,20,20,v)
    #define   GET16ADAC_ctrl_TEST_MODE(r16)                    _BFGET_(r16, 4, 4)
    #define   SET16ADAC_ctrl_TEST_MODE(r16,v)                  _BFSET_(r16, 4, 4,v)

            UNSG32 u_DAC_RSVD_IN                               : 20;
            UNSG32 u_TEST_MODE                                 :  1;
            UNSG32 RSVDx4_b21                                  : 11;
    ///////////////////////////////////////////////////////////
    } SIE_ADAC_ctrl;

    ///////////////////////////////////////////////////////////
     SIGN32 ADAC_ctrl_drvrd(SIE_ADAC_ctrl *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ADAC_ctrl_drvwr(SIE_ADAC_ctrl *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ADAC_ctrl_reset(SIE_ADAC_ctrl *p);
     SIGN32 ADAC_ctrl_cmp  (SIE_ADAC_ctrl *p, SIE_ADAC_ctrl *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ADAC_ctrl_check(p,pie,pfx,hLOG) ADAC_ctrl_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ADAC_ctrl_print(p,    pfx,hLOG) ADAC_ctrl_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ADAC_ctrl
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ADAC_sts                biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 status               (R-)
///               %unsigned 12 DAC_RSVD_OUT              
///                                    ###
///                                    * Reserved for DAC test purpose
///                                    ###
///               %%        20         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      12b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ADAC_sts
#define h_ADAC_sts (){}

    #define     RA_ADAC_sts_status                             0x0000

    #define     BA_ADAC_sts_status_DAC_RSVD_OUT                0x0000
    #define     B16ADAC_sts_status_DAC_RSVD_OUT                0x0000
    #define   LSb32ADAC_sts_status_DAC_RSVD_OUT                   0
    #define   LSb16ADAC_sts_status_DAC_RSVD_OUT                   0
    #define       bADAC_sts_status_DAC_RSVD_OUT                12
    #define   MSK32ADAC_sts_status_DAC_RSVD_OUT                   0x00000FFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ADAC_sts {
    ///////////////////////////////////////////////////////////
    #define   GET32ADAC_sts_status_DAC_RSVD_OUT(r32)           _BFGET_(r32,11, 0)
    #define   SET32ADAC_sts_status_DAC_RSVD_OUT(r32,v)         _BFSET_(r32,11, 0,v)
    #define   GET16ADAC_sts_status_DAC_RSVD_OUT(r16)           _BFGET_(r16,11, 0)
    #define   SET16ADAC_sts_status_DAC_RSVD_OUT(r16,v)         _BFSET_(r16,11, 0,v)

    #define     w32ADAC_sts_status                             {\
            UNSG32 ustatus_DAC_RSVD_OUT                        : 12;\
            UNSG32 RSVDx0_b12                                  : 20;\
          }
    union { UNSG32 u32ADAC_sts_status;
            struct w32ADAC_sts_status;
          };
    ///////////////////////////////////////////////////////////
    } SIE_ADAC_sts;

    typedef union  T32ADAC_sts_status
          { UNSG32 u32;
            struct w32ADAC_sts_status;
                 } T32ADAC_sts_status;
    ///////////////////////////////////////////////////////////

    typedef union  TADAC_sts_status
          { UNSG32 u32[1];
            struct {
            struct w32ADAC_sts_status;
                   };
                 } TADAC_sts_status;

    ///////////////////////////////////////////////////////////
     SIGN32 ADAC_sts_drvrd(SIE_ADAC_sts *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ADAC_sts_drvwr(SIE_ADAC_sts *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ADAC_sts_reset(SIE_ADAC_sts *p);
     SIGN32 ADAC_sts_cmp  (SIE_ADAC_sts *p, SIE_ADAC_sts *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ADAC_sts_check(p,pie,pfx,hLOG) ADAC_sts_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ADAC_sts_print(p,    pfx,hLOG) ADAC_sts_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ADAC_sts
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE AppRegs                 biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 ErrorFlags           (R-)
///               %unsigned 1  unknown_command_ddr       
///                                    ###
///                                    * This flag is set when APP receives a command from DRR with un-supported command type
///                                    ###
///               %unsigned 1  unknown_command_sram      
///                                    ###
///                                    * This flag is set when APP receives a command from SRAM with un-supported command type or an appExeSram command.
///                                    ###
///               %unsigned 1  broken_command_sram       
///                                    ###
///                                    * This flag is set when the CMDSIZE in appExeSram doesn’t match the actual size of the commands been executed. For example, CMDSIZE is 1 (indicates 2 DW), but the command been executed is appSrc, which required 6 DW.
///                                    ###
///               %%        29         # Stuffing bits...
///     @ 0x00004 DmaStatus            (R-)
///               %unsigned 1  prefecth_buffer_overrun   
///                                    ###
///                                    * This flag is set when APP hangs because DMA pre-fetch buffer overruns. This happens when pre-fetch appDmaCmd outnumber pre-fetch appDmaDat by too much.
///                                    ###
///               %unsigned 1  prefecth_buffer_underrun  
///                                    ###
///                                    * This flag is set when APP hangs because DMA pre-fetch buffer underruns. This happens when pre-fetch appDmaDat outnumber pre-fetch appDmaCmd by too much.
///                                    ###
///               %unsigned 1  writeback_buffer_overrun  
///                                    ###
///                                    * This flag is set when APP hangs because DMA write-back buffer overruns. This happens when write-back appDmaDat outnumber write-back appDmaCmd by too much.
///                                    ###
///               %unsigned 1  writeback_buffer_underrun 
///                                    ###
///                                    * This flag is set when APP hangs because DMA write-back buffer underruns. This happens when write-back appDmaCmd outnumber write-back appDmaDat by too much.
///                                    ###
///               %%        28         # Stuffing bits...
///     @ 0x00008 LastCmd              (R-)
///               %unsigned 32 LAST_COMMAND_0i           
///     # 0x0000C LastCmd1             
///               %unsigned 32 LAST_COMMAND_1i           
///     # 0x00010 LastCmd2             
///               %unsigned 32 LAST_COMMAND_2i           
///     # 0x00014 LastCmd3             
///               %unsigned 32 LAST_COMMAND_3i           
///     # 0x00018 LastCmd4             
///               %unsigned 32 LAST_COMMAND_4i           
///     # 0x0001C LastCmd5             
///               %unsigned 32 LAST_COMMAND_5i           
///                                    ###
///                                    * Last command been executed by APP
///                                    ###
///     @ 0x00020                      (P)
///     # 0x00020 ADAC_ctrl            
///               $ADAC_ctrl           ADAC_ctrl         REG          
///     @ 0x00028                      (P)
///     # 0x00028 ADAC_sts             
///               $ADAC_sts            ADAC_sts          REG          
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      44B, bits:     248b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_AppRegs
#define h_AppRegs (){}

    #define     RA_AppRegs_ErrorFlags                          0x0000

    #define     BA_AppRegs_ErrorFlags_unknown_command_ddr      0x0000
    #define     B16AppRegs_ErrorFlags_unknown_command_ddr      0x0000
    #define   LSb32AppRegs_ErrorFlags_unknown_command_ddr         0
    #define   LSb16AppRegs_ErrorFlags_unknown_command_ddr         0
    #define       bAppRegs_ErrorFlags_unknown_command_ddr      1
    #define   MSK32AppRegs_ErrorFlags_unknown_command_ddr         0x00000001

    #define     BA_AppRegs_ErrorFlags_unknown_command_sram     0x0000
    #define     B16AppRegs_ErrorFlags_unknown_command_sram     0x0000
    #define   LSb32AppRegs_ErrorFlags_unknown_command_sram        1
    #define   LSb16AppRegs_ErrorFlags_unknown_command_sram        1
    #define       bAppRegs_ErrorFlags_unknown_command_sram     1
    #define   MSK32AppRegs_ErrorFlags_unknown_command_sram        0x00000002

    #define     BA_AppRegs_ErrorFlags_broken_command_sram      0x0000
    #define     B16AppRegs_ErrorFlags_broken_command_sram      0x0000
    #define   LSb32AppRegs_ErrorFlags_broken_command_sram         2
    #define   LSb16AppRegs_ErrorFlags_broken_command_sram         2
    #define       bAppRegs_ErrorFlags_broken_command_sram      1
    #define   MSK32AppRegs_ErrorFlags_broken_command_sram         0x00000004
    ///////////////////////////////////////////////////////////
    #define     RA_AppRegs_DmaStatus                           0x0004

    #define     BA_AppRegs_DmaStatus_prefecth_buffer_overrun   0x0004
    #define     B16AppRegs_DmaStatus_prefecth_buffer_overrun   0x0004
    #define   LSb32AppRegs_DmaStatus_prefecth_buffer_overrun      0
    #define   LSb16AppRegs_DmaStatus_prefecth_buffer_overrun      0
    #define       bAppRegs_DmaStatus_prefecth_buffer_overrun   1
    #define   MSK32AppRegs_DmaStatus_prefecth_buffer_overrun      0x00000001

    #define     BA_AppRegs_DmaStatus_prefecth_buffer_underrun  0x0004
    #define     B16AppRegs_DmaStatus_prefecth_buffer_underrun  0x0004
    #define   LSb32AppRegs_DmaStatus_prefecth_buffer_underrun     1
    #define   LSb16AppRegs_DmaStatus_prefecth_buffer_underrun     1
    #define       bAppRegs_DmaStatus_prefecth_buffer_underrun  1
    #define   MSK32AppRegs_DmaStatus_prefecth_buffer_underrun     0x00000002

    #define     BA_AppRegs_DmaStatus_writeback_buffer_overrun  0x0004
    #define     B16AppRegs_DmaStatus_writeback_buffer_overrun  0x0004
    #define   LSb32AppRegs_DmaStatus_writeback_buffer_overrun     2
    #define   LSb16AppRegs_DmaStatus_writeback_buffer_overrun     2
    #define       bAppRegs_DmaStatus_writeback_buffer_overrun  1
    #define   MSK32AppRegs_DmaStatus_writeback_buffer_overrun     0x00000004

    #define     BA_AppRegs_DmaStatus_writeback_buffer_underrun 0x0004
    #define     B16AppRegs_DmaStatus_writeback_buffer_underrun 0x0004
    #define   LSb32AppRegs_DmaStatus_writeback_buffer_underrun    3
    #define   LSb16AppRegs_DmaStatus_writeback_buffer_underrun    3
    #define       bAppRegs_DmaStatus_writeback_buffer_underrun 1
    #define   MSK32AppRegs_DmaStatus_writeback_buffer_underrun    0x00000008
    ///////////////////////////////////////////////////////////
    #define     RA_AppRegs_LastCmd                             0x0008

    #define     BA_AppRegs_LastCmd_LAST_COMMAND_0i             0x0008
    #define     B16AppRegs_LastCmd_LAST_COMMAND_0i             0x0008
    #define   LSb32AppRegs_LastCmd_LAST_COMMAND_0i                0
    #define   LSb16AppRegs_LastCmd_LAST_COMMAND_0i                0
    #define       bAppRegs_LastCmd_LAST_COMMAND_0i             32
    #define   MSK32AppRegs_LastCmd_LAST_COMMAND_0i                0xFFFFFFFF

    #define     RA_AppRegs_LastCmd1                            0x000C

    #define     BA_AppRegs_LastCmd_LAST_COMMAND_1i             0x000C
    #define     B16AppRegs_LastCmd_LAST_COMMAND_1i             0x000C
    #define   LSb32AppRegs_LastCmd_LAST_COMMAND_1i                0
    #define   LSb16AppRegs_LastCmd_LAST_COMMAND_1i                0
    #define       bAppRegs_LastCmd_LAST_COMMAND_1i             32
    #define   MSK32AppRegs_LastCmd_LAST_COMMAND_1i                0xFFFFFFFF

    #define     RA_AppRegs_LastCmd2                            0x0010

    #define     BA_AppRegs_LastCmd_LAST_COMMAND_2i             0x0010
    #define     B16AppRegs_LastCmd_LAST_COMMAND_2i             0x0010
    #define   LSb32AppRegs_LastCmd_LAST_COMMAND_2i                0
    #define   LSb16AppRegs_LastCmd_LAST_COMMAND_2i                0
    #define       bAppRegs_LastCmd_LAST_COMMAND_2i             32
    #define   MSK32AppRegs_LastCmd_LAST_COMMAND_2i                0xFFFFFFFF

    #define     RA_AppRegs_LastCmd3                            0x0014

    #define     BA_AppRegs_LastCmd_LAST_COMMAND_3i             0x0014
    #define     B16AppRegs_LastCmd_LAST_COMMAND_3i             0x0014
    #define   LSb32AppRegs_LastCmd_LAST_COMMAND_3i                0
    #define   LSb16AppRegs_LastCmd_LAST_COMMAND_3i                0
    #define       bAppRegs_LastCmd_LAST_COMMAND_3i             32
    #define   MSK32AppRegs_LastCmd_LAST_COMMAND_3i                0xFFFFFFFF

    #define     RA_AppRegs_LastCmd4                            0x0018

    #define     BA_AppRegs_LastCmd_LAST_COMMAND_4i             0x0018
    #define     B16AppRegs_LastCmd_LAST_COMMAND_4i             0x0018
    #define   LSb32AppRegs_LastCmd_LAST_COMMAND_4i                0
    #define   LSb16AppRegs_LastCmd_LAST_COMMAND_4i                0
    #define       bAppRegs_LastCmd_LAST_COMMAND_4i             32
    #define   MSK32AppRegs_LastCmd_LAST_COMMAND_4i                0xFFFFFFFF

    #define     RA_AppRegs_LastCmd5                            0x001C

    #define     BA_AppRegs_LastCmd_LAST_COMMAND_5i             0x001C
    #define     B16AppRegs_LastCmd_LAST_COMMAND_5i             0x001C
    #define   LSb32AppRegs_LastCmd_LAST_COMMAND_5i                0
    #define   LSb16AppRegs_LastCmd_LAST_COMMAND_5i                0
    #define       bAppRegs_LastCmd_LAST_COMMAND_5i             32
    #define   MSK32AppRegs_LastCmd_LAST_COMMAND_5i                0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_AppRegs_ADAC_ctrl                           0x0020
    ///////////////////////////////////////////////////////////
    #define     RA_AppRegs_ADAC_sts                            0x0028
    ///////////////////////////////////////////////////////////

    typedef struct SIE_AppRegs {
    ///////////////////////////////////////////////////////////
    #define   GET32AppRegs_ErrorFlags_unknown_command_ddr(r32) _BFGET_(r32, 0, 0)
    #define   SET32AppRegs_ErrorFlags_unknown_command_ddr(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16AppRegs_ErrorFlags_unknown_command_ddr(r16) _BFGET_(r16, 0, 0)
    #define   SET16AppRegs_ErrorFlags_unknown_command_ddr(r16,v) _BFSET_(r16, 0, 0,v)

    #define   GET32AppRegs_ErrorFlags_unknown_command_sram(r32) _BFGET_(r32, 1, 1)
    #define   SET32AppRegs_ErrorFlags_unknown_command_sram(r32,v) _BFSET_(r32, 1, 1,v)
    #define   GET16AppRegs_ErrorFlags_unknown_command_sram(r16) _BFGET_(r16, 1, 1)
    #define   SET16AppRegs_ErrorFlags_unknown_command_sram(r16,v) _BFSET_(r16, 1, 1,v)

    #define   GET32AppRegs_ErrorFlags_broken_command_sram(r32) _BFGET_(r32, 2, 2)
    #define   SET32AppRegs_ErrorFlags_broken_command_sram(r32,v) _BFSET_(r32, 2, 2,v)
    #define   GET16AppRegs_ErrorFlags_broken_command_sram(r16) _BFGET_(r16, 2, 2)
    #define   SET16AppRegs_ErrorFlags_broken_command_sram(r16,v) _BFSET_(r16, 2, 2,v)

    #define     w32AppRegs_ErrorFlags                          {\
            UNSG32 uErrorFlags_unknown_command_ddr             :  1;\
            UNSG32 uErrorFlags_unknown_command_sram            :  1;\
            UNSG32 uErrorFlags_broken_command_sram             :  1;\
            UNSG32 RSVDx0_b3                                   : 29;\
          }
    union { UNSG32 u32AppRegs_ErrorFlags;
            struct w32AppRegs_ErrorFlags;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AppRegs_DmaStatus_prefecth_buffer_overrun(r32) _BFGET_(r32, 0, 0)
    #define   SET32AppRegs_DmaStatus_prefecth_buffer_overrun(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16AppRegs_DmaStatus_prefecth_buffer_overrun(r16) _BFGET_(r16, 0, 0)
    #define   SET16AppRegs_DmaStatus_prefecth_buffer_overrun(r16,v) _BFSET_(r16, 0, 0,v)

    #define   GET32AppRegs_DmaStatus_prefecth_buffer_underrun(r32) _BFGET_(r32, 1, 1)
    #define   SET32AppRegs_DmaStatus_prefecth_buffer_underrun(r32,v) _BFSET_(r32, 1, 1,v)
    #define   GET16AppRegs_DmaStatus_prefecth_buffer_underrun(r16) _BFGET_(r16, 1, 1)
    #define   SET16AppRegs_DmaStatus_prefecth_buffer_underrun(r16,v) _BFSET_(r16, 1, 1,v)

    #define   GET32AppRegs_DmaStatus_writeback_buffer_overrun(r32) _BFGET_(r32, 2, 2)
    #define   SET32AppRegs_DmaStatus_writeback_buffer_overrun(r32,v) _BFSET_(r32, 2, 2,v)
    #define   GET16AppRegs_DmaStatus_writeback_buffer_overrun(r16) _BFGET_(r16, 2, 2)
    #define   SET16AppRegs_DmaStatus_writeback_buffer_overrun(r16,v) _BFSET_(r16, 2, 2,v)

    #define   GET32AppRegs_DmaStatus_writeback_buffer_underrun(r32) _BFGET_(r32, 3, 3)
    #define   SET32AppRegs_DmaStatus_writeback_buffer_underrun(r32,v) _BFSET_(r32, 3, 3,v)
    #define   GET16AppRegs_DmaStatus_writeback_buffer_underrun(r16) _BFGET_(r16, 3, 3)
    #define   SET16AppRegs_DmaStatus_writeback_buffer_underrun(r16,v) _BFSET_(r16, 3, 3,v)

    #define     w32AppRegs_DmaStatus                           {\
            UNSG32 uDmaStatus_prefecth_buffer_overrun          :  1;\
            UNSG32 uDmaStatus_prefecth_buffer_underrun         :  1;\
            UNSG32 uDmaStatus_writeback_buffer_overrun         :  1;\
            UNSG32 uDmaStatus_writeback_buffer_underrun        :  1;\
            UNSG32 RSVDx4_b4                                   : 28;\
          }
    union { UNSG32 u32AppRegs_DmaStatus;
            struct w32AppRegs_DmaStatus;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32AppRegs_LastCmd_LAST_COMMAND_0i(r32)        _BFGET_(r32,31, 0)
    #define   SET32AppRegs_LastCmd_LAST_COMMAND_0i(r32,v)      _BFSET_(r32,31, 0,v)

    #define     w32AppRegs_LastCmd                             {\
            UNSG32 uLastCmd_LAST_COMMAND_0i                    : 32;\
          }
    union { UNSG32 u32AppRegs_LastCmd;
            struct w32AppRegs_LastCmd;
          };
    #define   GET32AppRegs_LastCmd_LAST_COMMAND_1i(r32)        _BFGET_(r32,31, 0)
    #define   SET32AppRegs_LastCmd_LAST_COMMAND_1i(r32,v)      _BFSET_(r32,31, 0,v)

    #define     w32AppRegs_LastCmd1                            {\
            UNSG32 uLastCmd_LAST_COMMAND_1i                    : 32;\
          }
    union { UNSG32 u32AppRegs_LastCmd1;
            struct w32AppRegs_LastCmd1;
          };
    #define   GET32AppRegs_LastCmd_LAST_COMMAND_2i(r32)        _BFGET_(r32,31, 0)
    #define   SET32AppRegs_LastCmd_LAST_COMMAND_2i(r32,v)      _BFSET_(r32,31, 0,v)

    #define     w32AppRegs_LastCmd2                            {\
            UNSG32 uLastCmd_LAST_COMMAND_2i                    : 32;\
          }
    union { UNSG32 u32AppRegs_LastCmd2;
            struct w32AppRegs_LastCmd2;
          };
    #define   GET32AppRegs_LastCmd_LAST_COMMAND_3i(r32)        _BFGET_(r32,31, 0)
    #define   SET32AppRegs_LastCmd_LAST_COMMAND_3i(r32,v)      _BFSET_(r32,31, 0,v)

    #define     w32AppRegs_LastCmd3                            {\
            UNSG32 uLastCmd_LAST_COMMAND_3i                    : 32;\
          }
    union { UNSG32 u32AppRegs_LastCmd3;
            struct w32AppRegs_LastCmd3;
          };
    #define   GET32AppRegs_LastCmd_LAST_COMMAND_4i(r32)        _BFGET_(r32,31, 0)
    #define   SET32AppRegs_LastCmd_LAST_COMMAND_4i(r32,v)      _BFSET_(r32,31, 0,v)

    #define     w32AppRegs_LastCmd4                            {\
            UNSG32 uLastCmd_LAST_COMMAND_4i                    : 32;\
          }
    union { UNSG32 u32AppRegs_LastCmd4;
            struct w32AppRegs_LastCmd4;
          };
    #define   GET32AppRegs_LastCmd_LAST_COMMAND_5i(r32)        _BFGET_(r32,31, 0)
    #define   SET32AppRegs_LastCmd_LAST_COMMAND_5i(r32,v)      _BFSET_(r32,31, 0,v)

    #define     w32AppRegs_LastCmd5                            {\
            UNSG32 uLastCmd_LAST_COMMAND_5i                    : 32;\
          }
    union { UNSG32 u32AppRegs_LastCmd5;
            struct w32AppRegs_LastCmd5;
          };
    ///////////////////////////////////////////////////////////
              SIE_ADAC_ctrl                                    ie_ADAC_ctrl;
    ///////////////////////////////////////////////////////////
              SIE_ADAC_sts                                     ie_ADAC_sts;
    ///////////////////////////////////////////////////////////
    } SIE_AppRegs;

    typedef union  T32AppRegs_ErrorFlags
          { UNSG32 u32;
            struct w32AppRegs_ErrorFlags;
                 } T32AppRegs_ErrorFlags;
    typedef union  T32AppRegs_DmaStatus
          { UNSG32 u32;
            struct w32AppRegs_DmaStatus;
                 } T32AppRegs_DmaStatus;
    typedef union  T32AppRegs_LastCmd
          { UNSG32 u32;
            struct w32AppRegs_LastCmd;
                 } T32AppRegs_LastCmd;
    typedef union  T32AppRegs_LastCmd1
          { UNSG32 u32;
            struct w32AppRegs_LastCmd1;
                 } T32AppRegs_LastCmd1;
    typedef union  T32AppRegs_LastCmd2
          { UNSG32 u32;
            struct w32AppRegs_LastCmd2;
                 } T32AppRegs_LastCmd2;
    typedef union  T32AppRegs_LastCmd3
          { UNSG32 u32;
            struct w32AppRegs_LastCmd3;
                 } T32AppRegs_LastCmd3;
    typedef union  T32AppRegs_LastCmd4
          { UNSG32 u32;
            struct w32AppRegs_LastCmd4;
                 } T32AppRegs_LastCmd4;
    typedef union  T32AppRegs_LastCmd5
          { UNSG32 u32;
            struct w32AppRegs_LastCmd5;
                 } T32AppRegs_LastCmd5;
    ///////////////////////////////////////////////////////////

    typedef union  TAppRegs_ErrorFlags
          { UNSG32 u32[1];
            struct {
            struct w32AppRegs_ErrorFlags;
                   };
                 } TAppRegs_ErrorFlags;
    typedef union  TAppRegs_DmaStatus
          { UNSG32 u32[1];
            struct {
            struct w32AppRegs_DmaStatus;
                   };
                 } TAppRegs_DmaStatus;
    typedef union  TAppRegs_LastCmd
          { UNSG32 u32[6];
            struct {
            struct w32AppRegs_LastCmd;
            struct w32AppRegs_LastCmd1;
            struct w32AppRegs_LastCmd2;
            struct w32AppRegs_LastCmd3;
            struct w32AppRegs_LastCmd4;
            struct w32AppRegs_LastCmd5;
                   };
                 } TAppRegs_LastCmd;

    ///////////////////////////////////////////////////////////
     SIGN32 AppRegs_drvrd(SIE_AppRegs *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 AppRegs_drvwr(SIE_AppRegs *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void AppRegs_reset(SIE_AppRegs *p);
     SIGN32 AppRegs_cmp  (SIE_AppRegs *p, SIE_AppRegs *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define AppRegs_check(p,pie,pfx,hLOG) AppRegs_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define AppRegs_print(p,    pfx,hLOG) AppRegs_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: AppRegs
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: app.h
////////////////////////////////////////////////////////////

