/********************************************************************************
 * 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: CopyDma.h
////////////////////////////////////////////////////////////
#ifndef CopyDma_h
#define CopyDma_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 CopyDMADescriptor       biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 32 NextDescAddress           
///                                    ###
///                                    * Address of the next descriptor in the descriptor list. Descriptor must start from 4-byte aligned address. H/W will ignore bit 1 and bit 0 of this field.
///                                    ###
///               %unsigned 3  CommnadType               
///                                    ###
///                                    * Command Type
///                                    ###
///                                    : Nop                       0x0
///                                    : MemSet                    0x1
///                                    : MemCopy                   0x2
///                                    : UpSizeBy2                 0x3
///                                    : UpSizeBy4                 0x4
///                                    : DownSizeBy2               0x5
///                                    : DownSizeBy4               0x6
///                                                 ###
///                                                 * All the undefined values are treated as Nop.
///                                                 ###
///               %unsigned 1  Reserved0                 
///               %unsigned 1  Last                      
///                                    ###
///                                    * 1: current descriptor is the last one in the list.
///                                    * 0: there are more descriptors in the list.
///                                    ###
///               %unsigned 1  IOC                       
///                                    ###
///                                    * Interrupt on complete
///                                    * After completing the copy task, Copy DMA will set the interrupt if this bit is set to 1
///                                    ###
///               %unsigned 1  CPV                       
///                                    ###
///                                    * Command parameter valid;
///                                    * 1: use command parameter defined in the descriptor (CommandParameter field)
///                                    * 0: use the default command parameter.
///                                    * Please refer to command type definition for the default command parameter value.
///                                    ###
///               %unsigned 1  Reserved1                 
///               %unsigned 1  Done                      
///                                    ###
///                                    * Done Flag
///                                    * Copy DMA will set this bit to 1 after it finish the task. Firmware should set this bit to 0 when preparing the descriptor.
///                                    ###
///               %unsigned 23 Reserved2                 
///               %unsigned 32 SourceAddress             
///                                    ###
///                                    * Base address of the source buffer;
///                                    ###
///               %unsigned 32 DestinationAddress        
///                                    ###
///                                    * Base address of the destination buffer, in byte
///                                    ###
///               %unsigned 16 HSize                     
///                                    ###
///                                    * Horizontal size of the 2D window to be copied, in byte;
///                                    * 0 is mapped to 65536.
///                                    ###
///               %unsigned 16 VSize                     
///                                    ###
///                                    * Vertical size of the 2D window to be copied, in byte;
///                                    * 0 is mapped to 65536.
///                                    ###
///               %unsigned 16 SourceStride              
///                                    ###
///                                    * Stride of the source buffer, in byte
///                                    ###
///               %unsigned 16 DestinationStride         
///                                    ###
///                                    * Stride of the destination buffer, in byte;
///                                    ###
///               %unsigned 32 CommandParameter0         
///                                    ###
///                                    * Definition of this field varies for different type of commands. Only used when CPV is one.
///                                    * Please refer to command type definition for details
///                                    ###
///               %unsigned 32 Reserved3                 
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      32B, bits:     256b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CopyDMADescriptor
#define h_CopyDMADescriptor (){}

    #define     BA_CopyDMADescriptor_NextDescAddress           0x0000
    #define     B16CopyDMADescriptor_NextDescAddress           0x0000
    #define   LSb32CopyDMADescriptor_NextDescAddress              0
    #define   LSb16CopyDMADescriptor_NextDescAddress              0
    #define       bCopyDMADescriptor_NextDescAddress           32
    #define   MSK32CopyDMADescriptor_NextDescAddress              0xFFFFFFFF

    #define     BA_CopyDMADescriptor_CommnadType               0x0004
    #define     B16CopyDMADescriptor_CommnadType               0x0004
    #define   LSb32CopyDMADescriptor_CommnadType                  0
    #define   LSb16CopyDMADescriptor_CommnadType                  0
    #define       bCopyDMADescriptor_CommnadType               3
    #define   MSK32CopyDMADescriptor_CommnadType                  0x00000007
    #define        CopyDMADescriptor_CommnadType_Nop                        0x0
    #define        CopyDMADescriptor_CommnadType_MemSet                     0x1
    #define        CopyDMADescriptor_CommnadType_MemCopy                    0x2
    #define        CopyDMADescriptor_CommnadType_UpSizeBy2                  0x3
    #define        CopyDMADescriptor_CommnadType_UpSizeBy4                  0x4
    #define        CopyDMADescriptor_CommnadType_DownSizeBy2                0x5
    #define        CopyDMADescriptor_CommnadType_DownSizeBy4                0x6

    #define     BA_CopyDMADescriptor_Reserved0                 0x0004
    #define     B16CopyDMADescriptor_Reserved0                 0x0004
    #define   LSb32CopyDMADescriptor_Reserved0                    3
    #define   LSb16CopyDMADescriptor_Reserved0                    3
    #define       bCopyDMADescriptor_Reserved0                 1
    #define   MSK32CopyDMADescriptor_Reserved0                    0x00000008

    #define     BA_CopyDMADescriptor_Last                      0x0004
    #define     B16CopyDMADescriptor_Last                      0x0004
    #define   LSb32CopyDMADescriptor_Last                         4
    #define   LSb16CopyDMADescriptor_Last                         4
    #define       bCopyDMADescriptor_Last                      1
    #define   MSK32CopyDMADescriptor_Last                         0x00000010

    #define     BA_CopyDMADescriptor_IOC                       0x0004
    #define     B16CopyDMADescriptor_IOC                       0x0004
    #define   LSb32CopyDMADescriptor_IOC                          5
    #define   LSb16CopyDMADescriptor_IOC                          5
    #define       bCopyDMADescriptor_IOC                       1
    #define   MSK32CopyDMADescriptor_IOC                          0x00000020

    #define     BA_CopyDMADescriptor_CPV                       0x0004
    #define     B16CopyDMADescriptor_CPV                       0x0004
    #define   LSb32CopyDMADescriptor_CPV                          6
    #define   LSb16CopyDMADescriptor_CPV                          6
    #define       bCopyDMADescriptor_CPV                       1
    #define   MSK32CopyDMADescriptor_CPV                          0x00000040

    #define     BA_CopyDMADescriptor_Reserved1                 0x0004
    #define     B16CopyDMADescriptor_Reserved1                 0x0004
    #define   LSb32CopyDMADescriptor_Reserved1                    7
    #define   LSb16CopyDMADescriptor_Reserved1                    7
    #define       bCopyDMADescriptor_Reserved1                 1
    #define   MSK32CopyDMADescriptor_Reserved1                    0x00000080

    #define     BA_CopyDMADescriptor_Done                      0x0005
    #define     B16CopyDMADescriptor_Done                      0x0004
    #define   LSb32CopyDMADescriptor_Done                         8
    #define   LSb16CopyDMADescriptor_Done                         8
    #define       bCopyDMADescriptor_Done                      1
    #define   MSK32CopyDMADescriptor_Done                         0x00000100

    #define     BA_CopyDMADescriptor_Reserved2                 0x0005
    #define     B16CopyDMADescriptor_Reserved2                 0x0004
    #define   LSb32CopyDMADescriptor_Reserved2                    9
    #define   LSb16CopyDMADescriptor_Reserved2                    9
    #define       bCopyDMADescriptor_Reserved2                 23
    #define   MSK32CopyDMADescriptor_Reserved2                    0xFFFFFE00

    #define     BA_CopyDMADescriptor_SourceAddress             0x0008
    #define     B16CopyDMADescriptor_SourceAddress             0x0008
    #define   LSb32CopyDMADescriptor_SourceAddress                0
    #define   LSb16CopyDMADescriptor_SourceAddress                0
    #define       bCopyDMADescriptor_SourceAddress             32
    #define   MSK32CopyDMADescriptor_SourceAddress                0xFFFFFFFF

    #define     BA_CopyDMADescriptor_DestinationAddress        0x000C
    #define     B16CopyDMADescriptor_DestinationAddress        0x000C
    #define   LSb32CopyDMADescriptor_DestinationAddress           0
    #define   LSb16CopyDMADescriptor_DestinationAddress           0
    #define       bCopyDMADescriptor_DestinationAddress        32
    #define   MSK32CopyDMADescriptor_DestinationAddress           0xFFFFFFFF

    #define     BA_CopyDMADescriptor_HSize                     0x0010
    #define     B16CopyDMADescriptor_HSize                     0x0010
    #define   LSb32CopyDMADescriptor_HSize                        0
    #define   LSb16CopyDMADescriptor_HSize                        0
    #define       bCopyDMADescriptor_HSize                     16
    #define   MSK32CopyDMADescriptor_HSize                        0x0000FFFF

    #define     BA_CopyDMADescriptor_VSize                     0x0012
    #define     B16CopyDMADescriptor_VSize                     0x0012
    #define   LSb32CopyDMADescriptor_VSize                        16
    #define   LSb16CopyDMADescriptor_VSize                        0
    #define       bCopyDMADescriptor_VSize                     16
    #define   MSK32CopyDMADescriptor_VSize                        0xFFFF0000

    #define     BA_CopyDMADescriptor_SourceStride              0x0014
    #define     B16CopyDMADescriptor_SourceStride              0x0014
    #define   LSb32CopyDMADescriptor_SourceStride                 0
    #define   LSb16CopyDMADescriptor_SourceStride                 0
    #define       bCopyDMADescriptor_SourceStride              16
    #define   MSK32CopyDMADescriptor_SourceStride                 0x0000FFFF

    #define     BA_CopyDMADescriptor_DestinationStride         0x0016
    #define     B16CopyDMADescriptor_DestinationStride         0x0016
    #define   LSb32CopyDMADescriptor_DestinationStride            16
    #define   LSb16CopyDMADescriptor_DestinationStride            0
    #define       bCopyDMADescriptor_DestinationStride         16
    #define   MSK32CopyDMADescriptor_DestinationStride            0xFFFF0000

    #define     BA_CopyDMADescriptor_CommandParameter0         0x0018
    #define     B16CopyDMADescriptor_CommandParameter0         0x0018
    #define   LSb32CopyDMADescriptor_CommandParameter0            0
    #define   LSb16CopyDMADescriptor_CommandParameter0            0
    #define       bCopyDMADescriptor_CommandParameter0         32
    #define   MSK32CopyDMADescriptor_CommandParameter0            0xFFFFFFFF

    #define     BA_CopyDMADescriptor_Reserved3                 0x001C
    #define     B16CopyDMADescriptor_Reserved3                 0x001C
    #define   LSb32CopyDMADescriptor_Reserved3                    0
    #define   LSb16CopyDMADescriptor_Reserved3                    0
    #define       bCopyDMADescriptor_Reserved3                 32
    #define   MSK32CopyDMADescriptor_Reserved3                    0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CopyDMADescriptor {
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDMADescriptor_NextDescAddress(r32)      _BFGET_(r32,31, 0)
    #define   SET32CopyDMADescriptor_NextDescAddress(r32,v)    _BFSET_(r32,31, 0,v)

            UNSG32 u_NextDescAddress                           : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32CopyDMADescriptor_CommnadType(r32)          _BFGET_(r32, 2, 0)
    #define   SET32CopyDMADescriptor_CommnadType(r32,v)        _BFSET_(r32, 2, 0,v)
    #define   GET16CopyDMADescriptor_CommnadType(r16)          _BFGET_(r16, 2, 0)
    #define   SET16CopyDMADescriptor_CommnadType(r16,v)        _BFSET_(r16, 2, 0,v)

    #define   GET32CopyDMADescriptor_Reserved0(r32)            _BFGET_(r32, 3, 3)
    #define   SET32CopyDMADescriptor_Reserved0(r32,v)          _BFSET_(r32, 3, 3,v)
    #define   GET16CopyDMADescriptor_Reserved0(r16)            _BFGET_(r16, 3, 3)
    #define   SET16CopyDMADescriptor_Reserved0(r16,v)          _BFSET_(r16, 3, 3,v)

    #define   GET32CopyDMADescriptor_Last(r32)                 _BFGET_(r32, 4, 4)
    #define   SET32CopyDMADescriptor_Last(r32,v)               _BFSET_(r32, 4, 4,v)
    #define   GET16CopyDMADescriptor_Last(r16)                 _BFGET_(r16, 4, 4)
    #define   SET16CopyDMADescriptor_Last(r16,v)               _BFSET_(r16, 4, 4,v)

    #define   GET32CopyDMADescriptor_IOC(r32)                  _BFGET_(r32, 5, 5)
    #define   SET32CopyDMADescriptor_IOC(r32,v)                _BFSET_(r32, 5, 5,v)
    #define   GET16CopyDMADescriptor_IOC(r16)                  _BFGET_(r16, 5, 5)
    #define   SET16CopyDMADescriptor_IOC(r16,v)                _BFSET_(r16, 5, 5,v)

    #define   GET32CopyDMADescriptor_CPV(r32)                  _BFGET_(r32, 6, 6)
    #define   SET32CopyDMADescriptor_CPV(r32,v)                _BFSET_(r32, 6, 6,v)
    #define   GET16CopyDMADescriptor_CPV(r16)                  _BFGET_(r16, 6, 6)
    #define   SET16CopyDMADescriptor_CPV(r16,v)                _BFSET_(r16, 6, 6,v)

    #define   GET32CopyDMADescriptor_Reserved1(r32)            _BFGET_(r32, 7, 7)
    #define   SET32CopyDMADescriptor_Reserved1(r32,v)          _BFSET_(r32, 7, 7,v)
    #define   GET16CopyDMADescriptor_Reserved1(r16)            _BFGET_(r16, 7, 7)
    #define   SET16CopyDMADescriptor_Reserved1(r16,v)          _BFSET_(r16, 7, 7,v)

    #define   GET32CopyDMADescriptor_Done(r32)                 _BFGET_(r32, 8, 8)
    #define   SET32CopyDMADescriptor_Done(r32,v)               _BFSET_(r32, 8, 8,v)
    #define   GET16CopyDMADescriptor_Done(r16)                 _BFGET_(r16, 8, 8)
    #define   SET16CopyDMADescriptor_Done(r16,v)               _BFSET_(r16, 8, 8,v)

    #define   GET32CopyDMADescriptor_Reserved2(r32)            _BFGET_(r32,31, 9)
    #define   SET32CopyDMADescriptor_Reserved2(r32,v)          _BFSET_(r32,31, 9,v)

            UNSG32 u_CommnadType                               :  3;
            UNSG32 u_Reserved0                                 :  1;
            UNSG32 u_Last                                      :  1;
            UNSG32 u_IOC                                       :  1;
            UNSG32 u_CPV                                       :  1;
            UNSG32 u_Reserved1                                 :  1;
            UNSG32 u_Done                                      :  1;
            UNSG32 u_Reserved2                                 : 23;
    ///////////////////////////////////////////////////////////

    #define   GET32CopyDMADescriptor_SourceAddress(r32)        _BFGET_(r32,31, 0)
    #define   SET32CopyDMADescriptor_SourceAddress(r32,v)      _BFSET_(r32,31, 0,v)

            UNSG32 u_SourceAddress                             : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32CopyDMADescriptor_DestinationAddress(r32)   _BFGET_(r32,31, 0)
    #define   SET32CopyDMADescriptor_DestinationAddress(r32,v) _BFSET_(r32,31, 0,v)

            UNSG32 u_DestinationAddress                        : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32CopyDMADescriptor_HSize(r32)                _BFGET_(r32,15, 0)
    #define   SET32CopyDMADescriptor_HSize(r32,v)              _BFSET_(r32,15, 0,v)
    #define   GET16CopyDMADescriptor_HSize(r16)                _BFGET_(r16,15, 0)
    #define   SET16CopyDMADescriptor_HSize(r16,v)              _BFSET_(r16,15, 0,v)

    #define   GET32CopyDMADescriptor_VSize(r32)                _BFGET_(r32,31,16)
    #define   SET32CopyDMADescriptor_VSize(r32,v)              _BFSET_(r32,31,16,v)
    #define   GET16CopyDMADescriptor_VSize(r16)                _BFGET_(r16,15, 0)
    #define   SET16CopyDMADescriptor_VSize(r16,v)              _BFSET_(r16,15, 0,v)

            UNSG32 u_HSize                                     : 16;
            UNSG32 u_VSize                                     : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32CopyDMADescriptor_SourceStride(r32)         _BFGET_(r32,15, 0)
    #define   SET32CopyDMADescriptor_SourceStride(r32,v)       _BFSET_(r32,15, 0,v)
    #define   GET16CopyDMADescriptor_SourceStride(r16)         _BFGET_(r16,15, 0)
    #define   SET16CopyDMADescriptor_SourceStride(r16,v)       _BFSET_(r16,15, 0,v)

    #define   GET32CopyDMADescriptor_DestinationStride(r32)    _BFGET_(r32,31,16)
    #define   SET32CopyDMADescriptor_DestinationStride(r32,v)  _BFSET_(r32,31,16,v)
    #define   GET16CopyDMADescriptor_DestinationStride(r16)    _BFGET_(r16,15, 0)
    #define   SET16CopyDMADescriptor_DestinationStride(r16,v)  _BFSET_(r16,15, 0,v)

            UNSG32 u_SourceStride                              : 16;
            UNSG32 u_DestinationStride                         : 16;
    ///////////////////////////////////////////////////////////

    #define   GET32CopyDMADescriptor_CommandParameter0(r32)    _BFGET_(r32,31, 0)
    #define   SET32CopyDMADescriptor_CommandParameter0(r32,v)  _BFSET_(r32,31, 0,v)

            UNSG32 u_CommandParameter0                         : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32CopyDMADescriptor_Reserved3(r32)            _BFGET_(r32,31, 0)
    #define   SET32CopyDMADescriptor_Reserved3(r32,v)          _BFSET_(r32,31, 0,v)

            UNSG32 u_Reserved3                                 : 32;
    ///////////////////////////////////////////////////////////
    } SIE_CopyDMADescriptor;

    ///////////////////////////////////////////////////////////
     SIGN32 CopyDMADescriptor_drvrd(SIE_CopyDMADescriptor *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CopyDMADescriptor_drvwr(SIE_CopyDMADescriptor *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CopyDMADescriptor_reset(SIE_CopyDMADescriptor *p);
     SIGN32 CopyDMADescriptor_cmp  (SIE_CopyDMADescriptor *p, SIE_CopyDMADescriptor *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CopyDMADescriptor_check(p,pie,pfx,hLOG) CopyDMADescriptor_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CopyDMADescriptor_print(p,    pfx,hLOG) CopyDMADescriptor_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CopyDMADescriptor
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CopyDmaAxiParam                          (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 AxiParam             (P)
///               %unsigned 4  ALEN                      0xF
///                                    ###
///                                    * Maxim burst length of the AXI requests issued by CopyDma. CopyDma also guarantees that AXI burst will not cross the boundary of maxim burst length.
///                                    * 0: one beat
///                                    * 1: two beats
///                                    * 2~3: four beats
///                                    * 4~7: eight beats
///                                    * 8~15: sixteen beats
///                                    ###
///               %unsigned 4  ACACHE                    0x0
///                                    ###
///                                    * The value will be passed to AxCACHE[3:0] on AXI interface
///                                    ###
///               %unsigned 1  AIOB                      0x0
///                                    ###
///                                    * The value will be passed to AxUSER[0] on AXI interface. Based on the value of this bit, SOC Fabric will route the AXI transaction through CPU IO coherent bridge or directly to memory controller.
///                                    * 1: AXI transaction goes through IO coherent bridge.
///                                    * 0: Data go directly to memory controller and data.
///                                    ###
///               %unsigned 3  APROT                     0x0
///                                    ###
///                                    * The value will be passed to AxPROT[2:0] on AXI interface
///                                    ###
///               %unsigned 4  AQOS                      0x0
///                                    ###
///                                    * The value will be passed to AxQOS[3:0] on AXI interface
///                                    ###
///               %%        16         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      16b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CopyDmaAxiParam
#define h_CopyDmaAxiParam (){}

    #define     RA_CopyDmaAxiParam_AxiParam                    0x0000

    #define     BA_CopyDmaAxiParam_AxiParam_ALEN               0x0000
    #define     B16CopyDmaAxiParam_AxiParam_ALEN               0x0000
    #define   LSb32CopyDmaAxiParam_AxiParam_ALEN                  0
    #define   LSb16CopyDmaAxiParam_AxiParam_ALEN                  0
    #define       bCopyDmaAxiParam_AxiParam_ALEN               4
    #define   MSK32CopyDmaAxiParam_AxiParam_ALEN                  0x0000000F

    #define     BA_CopyDmaAxiParam_AxiParam_ACACHE             0x0000
    #define     B16CopyDmaAxiParam_AxiParam_ACACHE             0x0000
    #define   LSb32CopyDmaAxiParam_AxiParam_ACACHE                4
    #define   LSb16CopyDmaAxiParam_AxiParam_ACACHE                4
    #define       bCopyDmaAxiParam_AxiParam_ACACHE             4
    #define   MSK32CopyDmaAxiParam_AxiParam_ACACHE                0x000000F0

    #define     BA_CopyDmaAxiParam_AxiParam_AIOB               0x0001
    #define     B16CopyDmaAxiParam_AxiParam_AIOB               0x0000
    #define   LSb32CopyDmaAxiParam_AxiParam_AIOB                  8
    #define   LSb16CopyDmaAxiParam_AxiParam_AIOB                  8
    #define       bCopyDmaAxiParam_AxiParam_AIOB               1
    #define   MSK32CopyDmaAxiParam_AxiParam_AIOB                  0x00000100

    #define     BA_CopyDmaAxiParam_AxiParam_APROT              0x0001
    #define     B16CopyDmaAxiParam_AxiParam_APROT              0x0000
    #define   LSb32CopyDmaAxiParam_AxiParam_APROT                 9
    #define   LSb16CopyDmaAxiParam_AxiParam_APROT                 9
    #define       bCopyDmaAxiParam_AxiParam_APROT              3
    #define   MSK32CopyDmaAxiParam_AxiParam_APROT                 0x00000E00

    #define     BA_CopyDmaAxiParam_AxiParam_AQOS               0x0001
    #define     B16CopyDmaAxiParam_AxiParam_AQOS               0x0000
    #define   LSb32CopyDmaAxiParam_AxiParam_AQOS                  12
    #define   LSb16CopyDmaAxiParam_AxiParam_AQOS                  12
    #define       bCopyDmaAxiParam_AxiParam_AQOS               4
    #define   MSK32CopyDmaAxiParam_AxiParam_AQOS                  0x0000F000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CopyDmaAxiParam {
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaAxiParam_AxiParam_ALEN(r32)          _BFGET_(r32, 3, 0)
    #define   SET32CopyDmaAxiParam_AxiParam_ALEN(r32,v)        _BFSET_(r32, 3, 0,v)
    #define   GET16CopyDmaAxiParam_AxiParam_ALEN(r16)          _BFGET_(r16, 3, 0)
    #define   SET16CopyDmaAxiParam_AxiParam_ALEN(r16,v)        _BFSET_(r16, 3, 0,v)

    #define   GET32CopyDmaAxiParam_AxiParam_ACACHE(r32)        _BFGET_(r32, 7, 4)
    #define   SET32CopyDmaAxiParam_AxiParam_ACACHE(r32,v)      _BFSET_(r32, 7, 4,v)
    #define   GET16CopyDmaAxiParam_AxiParam_ACACHE(r16)        _BFGET_(r16, 7, 4)
    #define   SET16CopyDmaAxiParam_AxiParam_ACACHE(r16,v)      _BFSET_(r16, 7, 4,v)

    #define   GET32CopyDmaAxiParam_AxiParam_AIOB(r32)          _BFGET_(r32, 8, 8)
    #define   SET32CopyDmaAxiParam_AxiParam_AIOB(r32,v)        _BFSET_(r32, 8, 8,v)
    #define   GET16CopyDmaAxiParam_AxiParam_AIOB(r16)          _BFGET_(r16, 8, 8)
    #define   SET16CopyDmaAxiParam_AxiParam_AIOB(r16,v)        _BFSET_(r16, 8, 8,v)

    #define   GET32CopyDmaAxiParam_AxiParam_APROT(r32)         _BFGET_(r32,11, 9)
    #define   SET32CopyDmaAxiParam_AxiParam_APROT(r32,v)       _BFSET_(r32,11, 9,v)
    #define   GET16CopyDmaAxiParam_AxiParam_APROT(r16)         _BFGET_(r16,11, 9)
    #define   SET16CopyDmaAxiParam_AxiParam_APROT(r16,v)       _BFSET_(r16,11, 9,v)

    #define   GET32CopyDmaAxiParam_AxiParam_AQOS(r32)          _BFGET_(r32,15,12)
    #define   SET32CopyDmaAxiParam_AxiParam_AQOS(r32,v)        _BFSET_(r32,15,12,v)
    #define   GET16CopyDmaAxiParam_AxiParam_AQOS(r16)          _BFGET_(r16,15,12)
    #define   SET16CopyDmaAxiParam_AxiParam_AQOS(r16,v)        _BFSET_(r16,15,12,v)

    #define     w32CopyDmaAxiParam_AxiParam                    {\
            UNSG32 uAxiParam_ALEN                              :  4;\
            UNSG32 uAxiParam_ACACHE                            :  4;\
            UNSG32 uAxiParam_AIOB                              :  1;\
            UNSG32 uAxiParam_APROT                             :  3;\
            UNSG32 uAxiParam_AQOS                              :  4;\
            UNSG32 RSVDx0_b16                                  : 16;\
          }
    union { UNSG32 u32CopyDmaAxiParam_AxiParam;
            struct w32CopyDmaAxiParam_AxiParam;
          };
    ///////////////////////////////////////////////////////////
    } SIE_CopyDmaAxiParam;

    typedef union  T32CopyDmaAxiParam_AxiParam
          { UNSG32 u32;
            struct w32CopyDmaAxiParam_AxiParam;
                 } T32CopyDmaAxiParam_AxiParam;
    ///////////////////////////////////////////////////////////

    typedef union  TCopyDmaAxiParam_AxiParam
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaAxiParam_AxiParam;
                   };
                 } TCopyDmaAxiParam_AxiParam;

    ///////////////////////////////////////////////////////////
     SIGN32 CopyDmaAxiParam_drvrd(SIE_CopyDmaAxiParam *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CopyDmaAxiParam_drvwr(SIE_CopyDmaAxiParam *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CopyDmaAxiParam_reset(SIE_CopyDmaAxiParam *p);
     SIGN32 CopyDmaAxiParam_cmp  (SIE_CopyDmaAxiParam *p, SIE_CopyDmaAxiParam *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CopyDmaAxiParam_check(p,pie,pfx,hLOG) CopyDmaAxiParam_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CopyDmaAxiParam_print(p,    pfx,hLOG) CopyDmaAxiParam_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CopyDmaAxiParam
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CopyDmaListCfg                           (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 StartAddr            (RW)
///               %unsigned 32 StartAddr                 
///                                    ###
///                                    * Starting address of the descriptor list
///                                    * Descriptor must start from 4-byte aligned address. H/W will ignore bit 1 and bit 0 of this field.
///                                    * Writing to this register will set the descriptor list to active.
///                                    * Firmware should only program it when the Busy bit for the same descriptor list is not set; otherwise, the write operation will be ignored and an error interrupt will be generated.
///                                    * When CopyDMA goes through a descriptor list, it will keep updating this field with the starting address of the current descriptor.
///                                    ###
///     @ 0x00004 DataPath             (P)
///               %unsigned 1  DataPath                  0x0
///                                    ###
///                                    * 0: Use data path 0
///                                    * 1: Use data path 1
///                                    ###
///               %%        31         # Stuffing bits...
///     @ 0x00008                      (W-)
///     #         # Stuffing bytes...
///               %% 64
///     @ 0x00010                      (P)
///     # 0x00010 DescLoadingAxiParam  
///               $CopyDmaAxiParam     DescLoadingAxiParam REG          
///                                    ###
///                                    * AXI parameters used for loading descriptors
///                                    ###
///     @ 0x00014                      (P)
///     # 0x00014 DescSavingAxiParam   
///               $CopyDmaAxiParam     DescSavingAxiParam REG          
///                                    ###
///                                    * AXI parameters used for saving descriptors
///                                    ###
///     @ 0x00018                      (P)
///     # 0x00018 DataLoadingAxiParam  
///               $CopyDmaAxiParam     DataLoadingAxiParam REG          
///                                    ###
///                                    * AXI parameters used for loading data
///                                    ###
///     @ 0x0001C                      (P)
///     # 0x0001C DataSavingAxiParam   
///               $CopyDmaAxiParam     DataSavingAxiParam REG          
///                                    ###
///                                    * AXI parameters used for loading data
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      32B, bits:      97b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CopyDmaListCfg
#define h_CopyDmaListCfg (){}

    #define     RA_CopyDmaListCfg_StartAddr                    0x0000

    #define     BA_CopyDmaListCfg_StartAddr_StartAddr          0x0000
    #define     B16CopyDmaListCfg_StartAddr_StartAddr          0x0000
    #define   LSb32CopyDmaListCfg_StartAddr_StartAddr             0
    #define   LSb16CopyDmaListCfg_StartAddr_StartAddr             0
    #define       bCopyDmaListCfg_StartAddr_StartAddr          32
    #define   MSK32CopyDmaListCfg_StartAddr_StartAddr             0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaListCfg_DataPath                     0x0004

    #define     BA_CopyDmaListCfg_DataPath_DataPath            0x0004
    #define     B16CopyDmaListCfg_DataPath_DataPath            0x0004
    #define   LSb32CopyDmaListCfg_DataPath_DataPath               0
    #define   LSb16CopyDmaListCfg_DataPath_DataPath               0
    #define       bCopyDmaListCfg_DataPath_DataPath            1
    #define   MSK32CopyDmaListCfg_DataPath_DataPath               0x00000001
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaListCfg_DescLoadingAxiParam          0x0010
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaListCfg_DescSavingAxiParam           0x0014
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaListCfg_DataLoadingAxiParam          0x0018
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaListCfg_DataSavingAxiParam           0x001C
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CopyDmaListCfg {
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaListCfg_StartAddr_StartAddr(r32)     _BFGET_(r32,31, 0)
    #define   SET32CopyDmaListCfg_StartAddr_StartAddr(r32,v)   _BFSET_(r32,31, 0,v)

    #define     w32CopyDmaListCfg_StartAddr                    {\
            UNSG32 uStartAddr_StartAddr                        : 32;\
          }
    union { UNSG32 u32CopyDmaListCfg_StartAddr;
            struct w32CopyDmaListCfg_StartAddr;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaListCfg_DataPath_DataPath(r32)       _BFGET_(r32, 0, 0)
    #define   SET32CopyDmaListCfg_DataPath_DataPath(r32,v)     _BFSET_(r32, 0, 0,v)
    #define   GET16CopyDmaListCfg_DataPath_DataPath(r16)       _BFGET_(r16, 0, 0)
    #define   SET16CopyDmaListCfg_DataPath_DataPath(r16,v)     _BFSET_(r16, 0, 0,v)

    #define     w32CopyDmaListCfg_DataPath                     {\
            UNSG32 uDataPath_DataPath                          :  1;\
            UNSG32 RSVDx4_b1                                   : 31;\
          }
    union { UNSG32 u32CopyDmaListCfg_DataPath;
            struct w32CopyDmaListCfg_DataPath;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx8                                      [8];
    ///////////////////////////////////////////////////////////
              SIE_CopyDmaAxiParam                              ie_DescLoadingAxiParam;
    ///////////////////////////////////////////////////////////
              SIE_CopyDmaAxiParam                              ie_DescSavingAxiParam;
    ///////////////////////////////////////////////////////////
              SIE_CopyDmaAxiParam                              ie_DataLoadingAxiParam;
    ///////////////////////////////////////////////////////////
              SIE_CopyDmaAxiParam                              ie_DataSavingAxiParam;
    ///////////////////////////////////////////////////////////
    } SIE_CopyDmaListCfg;

    typedef union  T32CopyDmaListCfg_StartAddr
          { UNSG32 u32;
            struct w32CopyDmaListCfg_StartAddr;
                 } T32CopyDmaListCfg_StartAddr;
    typedef union  T32CopyDmaListCfg_DataPath
          { UNSG32 u32;
            struct w32CopyDmaListCfg_DataPath;
                 } T32CopyDmaListCfg_DataPath;
    ///////////////////////////////////////////////////////////

    typedef union  TCopyDmaListCfg_StartAddr
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaListCfg_StartAddr;
                   };
                 } TCopyDmaListCfg_StartAddr;
    typedef union  TCopyDmaListCfg_DataPath
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaListCfg_DataPath;
                   };
                 } TCopyDmaListCfg_DataPath;

    ///////////////////////////////////////////////////////////
     SIGN32 CopyDmaListCfg_drvrd(SIE_CopyDmaListCfg *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CopyDmaListCfg_drvwr(SIE_CopyDmaListCfg *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CopyDmaListCfg_reset(SIE_CopyDmaListCfg *p);
     SIGN32 CopyDmaListCfg_cmp  (SIE_CopyDmaListCfg *p, SIE_CopyDmaListCfg *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CopyDmaListCfg_check(p,pie,pfx,hLOG) CopyDmaListCfg_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CopyDmaListCfg_print(p,    pfx,hLOG) CopyDmaListCfg_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CopyDmaListCfg
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CopyDmaReg              biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 Enable               (P)
///               %unsigned 1  Enable                    0x0
///                                    ###
///                                    * 1:enable CopyDMA
///                                    * 0:disable CopyDMA
///                                    * When disabled, CopyDMA will stay in reset state, all the configuration registers is still accessible and the values will be kept.
///                                    * After power on, CopyDMA is disabled until firmware set this bit to 1.
///                                    ###
///               %%        31         # Stuffing bits...
///     @ 0x00004 ClockControl         (P)
///               %unsigned 1  ClockGatingEnable         0x1
///                                    ###
///                                    * 1:enable clock gating
///                                    * 0:disable clock gating
///                                    * When clock gating is enabled, CopyDMA will turn off the core clock while there is no active descriptor list.
///                                    ###
///               %%        31         # Stuffing bits...
///     @ 0x00008                      (W-)
///     #         # Stuffing bytes...
///               %% 64
///     @ 0x00010 ListBusy             (R-)
///               %unsigned 8  ListBusy                  0x0
///                                    ###
///                                    * 1: Starting address of the descriptor list is programmed and the tasks in the list are not finished yet.
///                                    * 0: CopyDMA is ready to accept new starting address .
///                                    * Bit i is used for descriptor list i.
///                                    ###
///               %%        24         # Stuffing bits...
///     @ 0x00014                      (W-)
///     #         # Stuffing bytes...
///               %% 96
///     @ 0x00020 IntTaskDone          (WOC-)
///               %unsigned 1  IntTaskDone_0i            0x0
///               %unsigned 1  IntTaskDone_1i            0x0
///               %unsigned 1  IntTaskDone_2i            0x0
///               %unsigned 1  IntTaskDone_3i            0x0
///               %unsigned 1  IntTaskDone_4i            0x0
///               %unsigned 1  IntTaskDone_5i            0x0
///               %unsigned 1  IntTaskDone_6i            0x0
///               %unsigned 1  IntTaskDone_7i            0x0
///                                    ###
///                                    * Done bit will be set when task for a descriptor is finished and IOC in the descriptor is set.
///                                    * Writing ones to any of the bits will clear those bits.
///                                    * Bit i is used for descriptor list i.
///                                    ###
///               %%        24         # Stuffing bits...
///     @ 0x00024 IntTaskDoneMask      (P)
///               %unsigned 8  IntTaskDoneMask           0x0
///                                    ###
///                                    * Interrupt mask for IntTaskDone
///                                    * Bit i is used for IntTaskDone bit i.
///                                    ###
///               %%        24         # Stuffing bits...
///     @ 0x00028                      (W-)
///     #         # Stuffing bytes...
///               %% 64
///     @ 0x00030 IntStartError        (WOC-)
///               %unsigned 1  IntStartError_0i          0x0
///               %unsigned 1  IntStartError_1i          0x0
///               %unsigned 1  IntStartError_2i          0x0
///               %unsigned 1  IntStartError_3i          0x0
///               %unsigned 1  IntStartError_4i          0x0
///               %unsigned 1  IntStartError_5i          0x0
///               %unsigned 1  IntStartError_6i          0x0
///               %unsigned 1  IntStartError_7i          0x0
///                                    ###
///                                    * Error bit will be set when firmware writes to the StartAddr when Busy bit is high.
///                                    * Writing ones to any of the bits will clear those bits.
///                                    * Bit i is used for descriptor list i.
///                                    ###
///               %%        24         # Stuffing bits...
///     @ 0x00034 IntStartErrorMask    (P)
///               %unsigned 8  IntStartErrorMask         0x0
///                                    ###
///                                    * Interrupt mask for IntStartError
///                                    * Bit i is used for IntStartError bit i.
///                                    ###
///               %%        24         # Stuffing bits...
///     @ 0x00038                      (W-)
///     #         # Stuffing bytes...
///               %% 64
///     @ 0x00040 IntAxiRespError      (WOC-)
///               %unsigned 1  IntAxiRespError_0i        0x0
///               %unsigned 1  IntAxiRespError_1i        0x0
///               %unsigned 1  IntAxiRespError_2i        0x0
///               %unsigned 1  IntAxiRespError_3i        0x0
///               %unsigned 1  IntAxiRespError_4i        0x0
///               %unsigned 1  IntAxiRespError_5i        0x0
///               %unsigned 1  IntAxiRespError_6i        0x0
///               %unsigned 1  IntAxiRespError_7i        0x0
///               %unsigned 1  IntAxiRespError_8i        0x0
///               %unsigned 1  IntAxiRespError_9i        0x0
///               %unsigned 1  IntAxiRespError_10i       0x0
///               %unsigned 1  IntAxiRespError_11i       0x0
///               %unsigned 1  IntAxiRespError_12i       0x0
///               %unsigned 1  IntAxiRespError_13i       0x0
///               %unsigned 1  IntAxiRespError_14i       0x0
///               %unsigned 1  IntAxiRespError_15i       0x0
///                                    ###
///                                    * Error status for AXI response;
///                                    * Bit [0]: SLVERR on BRESP when BID is 0;
///                                    * Bit [1]: DECERR on BRESP when BID is 0;
///                                    * Bit [3:2]: BRESP errors when BID is 1;
///                                    * Bit [5:4]: BRESP errors when BID is 2;
///                                    * Bit [7:6]: BRESP errors when BID is 3;
///                                    * Bit[15:8]: RRESP errors;
///                                    * Writing ones to any of the bits will clear those bits.
///                                    ###
///               %%        16         # Stuffing bits...
///     @ 0x00044 IntAxiRespErrorMask  (P)
///               %unsigned 16 IntAxiRespErrorMask       0x0
///                                    ###
///                                    * Interrupt mask for IntAxiRespError
///                                    * Bit i is used for IntAxiRespError bit i.
///                                    ###
///               %%        16         # Stuffing bits...
///     @ 0x00048                      (W-)
///     #         # Stuffing bytes...
///               %% 1472
///     @ 0x00100                      (P)
///     # 0x00100 ListCfg              
///               $CopyDmaListCfg      ListCfg           REG       [8]
///                                    ###
///                                    * Configuration registers for each descriptor list
///                                    * Firmware should not change the value of ListCfg when the corresponding descriptor list is active (ListBusy is high).
///                                    * There are 8 ListCfg register sets, one for each descriptor list.
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:     850b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CopyDmaReg
#define h_CopyDmaReg (){}

    #define     RA_CopyDmaReg_Enable                           0x0000

    #define     BA_CopyDmaReg_Enable_Enable                    0x0000
    #define     B16CopyDmaReg_Enable_Enable                    0x0000
    #define   LSb32CopyDmaReg_Enable_Enable                       0
    #define   LSb16CopyDmaReg_Enable_Enable                       0
    #define       bCopyDmaReg_Enable_Enable                    1
    #define   MSK32CopyDmaReg_Enable_Enable                       0x00000001
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_ClockControl                     0x0004

    #define     BA_CopyDmaReg_ClockControl_ClockGatingEnable   0x0004
    #define     B16CopyDmaReg_ClockControl_ClockGatingEnable   0x0004
    #define   LSb32CopyDmaReg_ClockControl_ClockGatingEnable      0
    #define   LSb16CopyDmaReg_ClockControl_ClockGatingEnable      0
    #define       bCopyDmaReg_ClockControl_ClockGatingEnable   1
    #define   MSK32CopyDmaReg_ClockControl_ClockGatingEnable      0x00000001
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_ListBusy                         0x0010

    #define     BA_CopyDmaReg_ListBusy_ListBusy                0x0010
    #define     B16CopyDmaReg_ListBusy_ListBusy                0x0010
    #define   LSb32CopyDmaReg_ListBusy_ListBusy                   0
    #define   LSb16CopyDmaReg_ListBusy_ListBusy                   0
    #define       bCopyDmaReg_ListBusy_ListBusy                8
    #define   MSK32CopyDmaReg_ListBusy_ListBusy                   0x000000FF
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_IntTaskDone                      0x0020

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_0i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_0i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_0i          0
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_0i          0
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_0i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_0i          0x00000001

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_1i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_1i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_1i          1
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_1i          1
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_1i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_1i          0x00000002

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_2i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_2i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_2i          2
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_2i          2
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_2i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_2i          0x00000004

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_3i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_3i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_3i          3
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_3i          3
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_3i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_3i          0x00000008

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_4i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_4i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_4i          4
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_4i          4
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_4i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_4i          0x00000010

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_5i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_5i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_5i          5
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_5i          5
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_5i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_5i          0x00000020

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_6i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_6i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_6i          6
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_6i          6
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_6i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_6i          0x00000040

    #define     BA_CopyDmaReg_IntTaskDone_IntTaskDone_7i       0x0020
    #define     B16CopyDmaReg_IntTaskDone_IntTaskDone_7i       0x0020
    #define   LSb32CopyDmaReg_IntTaskDone_IntTaskDone_7i          7
    #define   LSb16CopyDmaReg_IntTaskDone_IntTaskDone_7i          7
    #define       bCopyDmaReg_IntTaskDone_IntTaskDone_7i       1
    #define   MSK32CopyDmaReg_IntTaskDone_IntTaskDone_7i          0x00000080
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_IntTaskDoneMask                  0x0024

    #define     BA_CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask  0x0024
    #define     B16CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask  0x0024
    #define   LSb32CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask     0
    #define   LSb16CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask     0
    #define       bCopyDmaReg_IntTaskDoneMask_IntTaskDoneMask  8
    #define   MSK32CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask     0x000000FF
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_IntStartError                    0x0030

    #define     BA_CopyDmaReg_IntStartError_IntStartError_0i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_0i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_0i      0
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_0i      0
    #define       bCopyDmaReg_IntStartError_IntStartError_0i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_0i      0x00000001

    #define     BA_CopyDmaReg_IntStartError_IntStartError_1i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_1i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_1i      1
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_1i      1
    #define       bCopyDmaReg_IntStartError_IntStartError_1i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_1i      0x00000002

    #define     BA_CopyDmaReg_IntStartError_IntStartError_2i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_2i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_2i      2
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_2i      2
    #define       bCopyDmaReg_IntStartError_IntStartError_2i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_2i      0x00000004

    #define     BA_CopyDmaReg_IntStartError_IntStartError_3i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_3i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_3i      3
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_3i      3
    #define       bCopyDmaReg_IntStartError_IntStartError_3i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_3i      0x00000008

    #define     BA_CopyDmaReg_IntStartError_IntStartError_4i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_4i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_4i      4
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_4i      4
    #define       bCopyDmaReg_IntStartError_IntStartError_4i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_4i      0x00000010

    #define     BA_CopyDmaReg_IntStartError_IntStartError_5i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_5i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_5i      5
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_5i      5
    #define       bCopyDmaReg_IntStartError_IntStartError_5i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_5i      0x00000020

    #define     BA_CopyDmaReg_IntStartError_IntStartError_6i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_6i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_6i      6
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_6i      6
    #define       bCopyDmaReg_IntStartError_IntStartError_6i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_6i      0x00000040

    #define     BA_CopyDmaReg_IntStartError_IntStartError_7i   0x0030
    #define     B16CopyDmaReg_IntStartError_IntStartError_7i   0x0030
    #define   LSb32CopyDmaReg_IntStartError_IntStartError_7i      7
    #define   LSb16CopyDmaReg_IntStartError_IntStartError_7i      7
    #define       bCopyDmaReg_IntStartError_IntStartError_7i   1
    #define   MSK32CopyDmaReg_IntStartError_IntStartError_7i      0x00000080
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_IntStartErrorMask                0x0034

    #define     BA_CopyDmaReg_IntStartErrorMask_IntStartErrorMask 0x0034
    #define     B16CopyDmaReg_IntStartErrorMask_IntStartErrorMask 0x0034
    #define   LSb32CopyDmaReg_IntStartErrorMask_IntStartErrorMask    0
    #define   LSb16CopyDmaReg_IntStartErrorMask_IntStartErrorMask    0
    #define       bCopyDmaReg_IntStartErrorMask_IntStartErrorMask 8
    #define   MSK32CopyDmaReg_IntStartErrorMask_IntStartErrorMask    0x000000FF
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_IntAxiRespError                  0x0040

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_0i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_0i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_0i    0
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_0i    0
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_0i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_0i    0x00000001

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_1i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_1i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_1i    1
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_1i    1
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_1i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_1i    0x00000002

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_2i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_2i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_2i    2
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_2i    2
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_2i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_2i    0x00000004

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_3i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_3i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_3i    3
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_3i    3
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_3i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_3i    0x00000008

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_4i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_4i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_4i    4
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_4i    4
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_4i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_4i    0x00000010

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_5i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_5i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_5i    5
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_5i    5
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_5i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_5i    0x00000020

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_6i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_6i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_6i    6
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_6i    6
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_6i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_6i    0x00000040

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_7i 0x0040
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_7i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_7i    7
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_7i    7
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_7i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_7i    0x00000080

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_8i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_8i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_8i    8
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_8i    8
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_8i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_8i    0x00000100

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_9i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_9i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_9i    9
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_9i    9
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_9i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_9i    0x00000200

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_10i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_10i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_10i    10
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_10i    10
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_10i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_10i    0x00000400

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_11i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_11i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_11i    11
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_11i    11
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_11i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_11i    0x00000800

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_12i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_12i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_12i    12
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_12i    12
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_12i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_12i    0x00001000

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_13i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_13i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_13i    13
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_13i    13
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_13i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_13i    0x00002000

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_14i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_14i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_14i    14
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_14i    14
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_14i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_14i    0x00004000

    #define     BA_CopyDmaReg_IntAxiRespError_IntAxiRespError_15i 0x0041
    #define     B16CopyDmaReg_IntAxiRespError_IntAxiRespError_15i 0x0040
    #define   LSb32CopyDmaReg_IntAxiRespError_IntAxiRespError_15i    15
    #define   LSb16CopyDmaReg_IntAxiRespError_IntAxiRespError_15i    15
    #define       bCopyDmaReg_IntAxiRespError_IntAxiRespError_15i 1
    #define   MSK32CopyDmaReg_IntAxiRespError_IntAxiRespError_15i    0x00008000
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_IntAxiRespErrorMask              0x0044

    #define     BA_CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask 0x0044
    #define     B16CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask 0x0044
    #define   LSb32CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask    0
    #define   LSb16CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask    0
    #define       bCopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask 16
    #define   MSK32CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask    0x0000FFFF
    ///////////////////////////////////////////////////////////
    #define     RA_CopyDmaReg_ListCfg                          0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CopyDmaReg {
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_Enable_Enable(r32)               _BFGET_(r32, 0, 0)
    #define   SET32CopyDmaReg_Enable_Enable(r32,v)             _BFSET_(r32, 0, 0,v)
    #define   GET16CopyDmaReg_Enable_Enable(r16)               _BFGET_(r16, 0, 0)
    #define   SET16CopyDmaReg_Enable_Enable(r16,v)             _BFSET_(r16, 0, 0,v)

    #define     w32CopyDmaReg_Enable                           {\
            UNSG32 uEnable_Enable                              :  1;\
            UNSG32 RSVDx0_b1                                   : 31;\
          }
    union { UNSG32 u32CopyDmaReg_Enable;
            struct w32CopyDmaReg_Enable;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_ClockControl_ClockGatingEnable(r32) _BFGET_(r32, 0, 0)
    #define   SET32CopyDmaReg_ClockControl_ClockGatingEnable(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16CopyDmaReg_ClockControl_ClockGatingEnable(r16) _BFGET_(r16, 0, 0)
    #define   SET16CopyDmaReg_ClockControl_ClockGatingEnable(r16,v) _BFSET_(r16, 0, 0,v)

    #define     w32CopyDmaReg_ClockControl                     {\
            UNSG32 uClockControl_ClockGatingEnable             :  1;\
            UNSG32 RSVDx4_b1                                   : 31;\
          }
    union { UNSG32 u32CopyDmaReg_ClockControl;
            struct w32CopyDmaReg_ClockControl;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx8                                      [8];
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_ListBusy_ListBusy(r32)           _BFGET_(r32, 7, 0)
    #define   SET32CopyDmaReg_ListBusy_ListBusy(r32,v)         _BFSET_(r32, 7, 0,v)
    #define   GET16CopyDmaReg_ListBusy_ListBusy(r16)           _BFGET_(r16, 7, 0)
    #define   SET16CopyDmaReg_ListBusy_ListBusy(r16,v)         _BFSET_(r16, 7, 0,v)

    #define     w32CopyDmaReg_ListBusy                         {\
            UNSG32 uListBusy_ListBusy                          :  8;\
            UNSG32 RSVDx10_b8                                  : 24;\
          }
    union { UNSG32 u32CopyDmaReg_ListBusy;
            struct w32CopyDmaReg_ListBusy;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx14                                     [12];
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_0i(r32)  _BFGET_(r32, 0, 0)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_0i(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_0i(r16)  _BFGET_(r16, 0, 0)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_0i(r16,v) _BFSET_(r16, 0, 0,v)

    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_1i(r32)  _BFGET_(r32, 1, 1)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_1i(r32,v) _BFSET_(r32, 1, 1,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_1i(r16)  _BFGET_(r16, 1, 1)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_1i(r16,v) _BFSET_(r16, 1, 1,v)

    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_2i(r32)  _BFGET_(r32, 2, 2)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_2i(r32,v) _BFSET_(r32, 2, 2,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_2i(r16)  _BFGET_(r16, 2, 2)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_2i(r16,v) _BFSET_(r16, 2, 2,v)

    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_3i(r32)  _BFGET_(r32, 3, 3)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_3i(r32,v) _BFSET_(r32, 3, 3,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_3i(r16)  _BFGET_(r16, 3, 3)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_3i(r16,v) _BFSET_(r16, 3, 3,v)

    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_4i(r32)  _BFGET_(r32, 4, 4)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_4i(r32,v) _BFSET_(r32, 4, 4,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_4i(r16)  _BFGET_(r16, 4, 4)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_4i(r16,v) _BFSET_(r16, 4, 4,v)

    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_5i(r32)  _BFGET_(r32, 5, 5)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_5i(r32,v) _BFSET_(r32, 5, 5,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_5i(r16)  _BFGET_(r16, 5, 5)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_5i(r16,v) _BFSET_(r16, 5, 5,v)

    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_6i(r32)  _BFGET_(r32, 6, 6)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_6i(r32,v) _BFSET_(r32, 6, 6,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_6i(r16)  _BFGET_(r16, 6, 6)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_6i(r16,v) _BFSET_(r16, 6, 6,v)

    #define   GET32CopyDmaReg_IntTaskDone_IntTaskDone_7i(r32)  _BFGET_(r32, 7, 7)
    #define   SET32CopyDmaReg_IntTaskDone_IntTaskDone_7i(r32,v) _BFSET_(r32, 7, 7,v)
    #define   GET16CopyDmaReg_IntTaskDone_IntTaskDone_7i(r16)  _BFGET_(r16, 7, 7)
    #define   SET16CopyDmaReg_IntTaskDone_IntTaskDone_7i(r16,v) _BFSET_(r16, 7, 7,v)

    #define     w32CopyDmaReg_IntTaskDone                      {\
            UNSG32 uIntTaskDone_IntTaskDone_0i                 :  1;\
            UNSG32 uIntTaskDone_IntTaskDone_1i                 :  1;\
            UNSG32 uIntTaskDone_IntTaskDone_2i                 :  1;\
            UNSG32 uIntTaskDone_IntTaskDone_3i                 :  1;\
            UNSG32 uIntTaskDone_IntTaskDone_4i                 :  1;\
            UNSG32 uIntTaskDone_IntTaskDone_5i                 :  1;\
            UNSG32 uIntTaskDone_IntTaskDone_6i                 :  1;\
            UNSG32 uIntTaskDone_IntTaskDone_7i                 :  1;\
            UNSG32 RSVDx20_b8                                  : 24;\
          }
    union { UNSG32 u32CopyDmaReg_IntTaskDone;
            struct w32CopyDmaReg_IntTaskDone;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask(r32) _BFGET_(r32, 7, 0)
    #define   SET32CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask(r32,v) _BFSET_(r32, 7, 0,v)
    #define   GET16CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask(r16) _BFGET_(r16, 7, 0)
    #define   SET16CopyDmaReg_IntTaskDoneMask_IntTaskDoneMask(r16,v) _BFSET_(r16, 7, 0,v)

    #define     w32CopyDmaReg_IntTaskDoneMask                  {\
            UNSG32 uIntTaskDoneMask_IntTaskDoneMask            :  8;\
            UNSG32 RSVDx24_b8                                  : 24;\
          }
    union { UNSG32 u32CopyDmaReg_IntTaskDoneMask;
            struct w32CopyDmaReg_IntTaskDoneMask;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx28                                     [8];
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_IntStartError_IntStartError_0i(r32) _BFGET_(r32, 0, 0)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_0i(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_0i(r16) _BFGET_(r16, 0, 0)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_0i(r16,v) _BFSET_(r16, 0, 0,v)

    #define   GET32CopyDmaReg_IntStartError_IntStartError_1i(r32) _BFGET_(r32, 1, 1)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_1i(r32,v) _BFSET_(r32, 1, 1,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_1i(r16) _BFGET_(r16, 1, 1)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_1i(r16,v) _BFSET_(r16, 1, 1,v)

    #define   GET32CopyDmaReg_IntStartError_IntStartError_2i(r32) _BFGET_(r32, 2, 2)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_2i(r32,v) _BFSET_(r32, 2, 2,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_2i(r16) _BFGET_(r16, 2, 2)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_2i(r16,v) _BFSET_(r16, 2, 2,v)

    #define   GET32CopyDmaReg_IntStartError_IntStartError_3i(r32) _BFGET_(r32, 3, 3)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_3i(r32,v) _BFSET_(r32, 3, 3,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_3i(r16) _BFGET_(r16, 3, 3)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_3i(r16,v) _BFSET_(r16, 3, 3,v)

    #define   GET32CopyDmaReg_IntStartError_IntStartError_4i(r32) _BFGET_(r32, 4, 4)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_4i(r32,v) _BFSET_(r32, 4, 4,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_4i(r16) _BFGET_(r16, 4, 4)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_4i(r16,v) _BFSET_(r16, 4, 4,v)

    #define   GET32CopyDmaReg_IntStartError_IntStartError_5i(r32) _BFGET_(r32, 5, 5)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_5i(r32,v) _BFSET_(r32, 5, 5,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_5i(r16) _BFGET_(r16, 5, 5)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_5i(r16,v) _BFSET_(r16, 5, 5,v)

    #define   GET32CopyDmaReg_IntStartError_IntStartError_6i(r32) _BFGET_(r32, 6, 6)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_6i(r32,v) _BFSET_(r32, 6, 6,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_6i(r16) _BFGET_(r16, 6, 6)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_6i(r16,v) _BFSET_(r16, 6, 6,v)

    #define   GET32CopyDmaReg_IntStartError_IntStartError_7i(r32) _BFGET_(r32, 7, 7)
    #define   SET32CopyDmaReg_IntStartError_IntStartError_7i(r32,v) _BFSET_(r32, 7, 7,v)
    #define   GET16CopyDmaReg_IntStartError_IntStartError_7i(r16) _BFGET_(r16, 7, 7)
    #define   SET16CopyDmaReg_IntStartError_IntStartError_7i(r16,v) _BFSET_(r16, 7, 7,v)

    #define     w32CopyDmaReg_IntStartError                    {\
            UNSG32 uIntStartError_IntStartError_0i             :  1;\
            UNSG32 uIntStartError_IntStartError_1i             :  1;\
            UNSG32 uIntStartError_IntStartError_2i             :  1;\
            UNSG32 uIntStartError_IntStartError_3i             :  1;\
            UNSG32 uIntStartError_IntStartError_4i             :  1;\
            UNSG32 uIntStartError_IntStartError_5i             :  1;\
            UNSG32 uIntStartError_IntStartError_6i             :  1;\
            UNSG32 uIntStartError_IntStartError_7i             :  1;\
            UNSG32 RSVDx30_b8                                  : 24;\
          }
    union { UNSG32 u32CopyDmaReg_IntStartError;
            struct w32CopyDmaReg_IntStartError;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_IntStartErrorMask_IntStartErrorMask(r32) _BFGET_(r32, 7, 0)
    #define   SET32CopyDmaReg_IntStartErrorMask_IntStartErrorMask(r32,v) _BFSET_(r32, 7, 0,v)
    #define   GET16CopyDmaReg_IntStartErrorMask_IntStartErrorMask(r16) _BFGET_(r16, 7, 0)
    #define   SET16CopyDmaReg_IntStartErrorMask_IntStartErrorMask(r16,v) _BFSET_(r16, 7, 0,v)

    #define     w32CopyDmaReg_IntStartErrorMask                {\
            UNSG32 uIntStartErrorMask_IntStartErrorMask        :  8;\
            UNSG32 RSVDx34_b8                                  : 24;\
          }
    union { UNSG32 u32CopyDmaReg_IntStartErrorMask;
            struct w32CopyDmaReg_IntStartErrorMask;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx38                                     [8];
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_0i(r32) _BFGET_(r32, 0, 0)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_0i(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_0i(r16) _BFGET_(r16, 0, 0)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_0i(r16,v) _BFSET_(r16, 0, 0,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_1i(r32) _BFGET_(r32, 1, 1)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_1i(r32,v) _BFSET_(r32, 1, 1,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_1i(r16) _BFGET_(r16, 1, 1)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_1i(r16,v) _BFSET_(r16, 1, 1,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_2i(r32) _BFGET_(r32, 2, 2)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_2i(r32,v) _BFSET_(r32, 2, 2,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_2i(r16) _BFGET_(r16, 2, 2)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_2i(r16,v) _BFSET_(r16, 2, 2,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_3i(r32) _BFGET_(r32, 3, 3)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_3i(r32,v) _BFSET_(r32, 3, 3,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_3i(r16) _BFGET_(r16, 3, 3)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_3i(r16,v) _BFSET_(r16, 3, 3,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_4i(r32) _BFGET_(r32, 4, 4)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_4i(r32,v) _BFSET_(r32, 4, 4,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_4i(r16) _BFGET_(r16, 4, 4)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_4i(r16,v) _BFSET_(r16, 4, 4,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_5i(r32) _BFGET_(r32, 5, 5)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_5i(r32,v) _BFSET_(r32, 5, 5,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_5i(r16) _BFGET_(r16, 5, 5)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_5i(r16,v) _BFSET_(r16, 5, 5,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_6i(r32) _BFGET_(r32, 6, 6)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_6i(r32,v) _BFSET_(r32, 6, 6,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_6i(r16) _BFGET_(r16, 6, 6)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_6i(r16,v) _BFSET_(r16, 6, 6,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_7i(r32) _BFGET_(r32, 7, 7)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_7i(r32,v) _BFSET_(r32, 7, 7,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_7i(r16) _BFGET_(r16, 7, 7)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_7i(r16,v) _BFSET_(r16, 7, 7,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_8i(r32) _BFGET_(r32, 8, 8)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_8i(r32,v) _BFSET_(r32, 8, 8,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_8i(r16) _BFGET_(r16, 8, 8)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_8i(r16,v) _BFSET_(r16, 8, 8,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_9i(r32) _BFGET_(r32, 9, 9)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_9i(r32,v) _BFSET_(r32, 9, 9,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_9i(r16) _BFGET_(r16, 9, 9)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_9i(r16,v) _BFSET_(r16, 9, 9,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_10i(r32) _BFGET_(r32,10,10)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_10i(r32,v) _BFSET_(r32,10,10,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_10i(r16) _BFGET_(r16,10,10)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_10i(r16,v) _BFSET_(r16,10,10,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_11i(r32) _BFGET_(r32,11,11)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_11i(r32,v) _BFSET_(r32,11,11,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_11i(r16) _BFGET_(r16,11,11)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_11i(r16,v) _BFSET_(r16,11,11,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_12i(r32) _BFGET_(r32,12,12)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_12i(r32,v) _BFSET_(r32,12,12,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_12i(r16) _BFGET_(r16,12,12)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_12i(r16,v) _BFSET_(r16,12,12,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_13i(r32) _BFGET_(r32,13,13)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_13i(r32,v) _BFSET_(r32,13,13,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_13i(r16) _BFGET_(r16,13,13)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_13i(r16,v) _BFSET_(r16,13,13,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_14i(r32) _BFGET_(r32,14,14)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_14i(r32,v) _BFSET_(r32,14,14,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_14i(r16) _BFGET_(r16,14,14)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_14i(r16,v) _BFSET_(r16,14,14,v)

    #define   GET32CopyDmaReg_IntAxiRespError_IntAxiRespError_15i(r32) _BFGET_(r32,15,15)
    #define   SET32CopyDmaReg_IntAxiRespError_IntAxiRespError_15i(r32,v) _BFSET_(r32,15,15,v)
    #define   GET16CopyDmaReg_IntAxiRespError_IntAxiRespError_15i(r16) _BFGET_(r16,15,15)
    #define   SET16CopyDmaReg_IntAxiRespError_IntAxiRespError_15i(r16,v) _BFSET_(r16,15,15,v)

    #define     w32CopyDmaReg_IntAxiRespError                  {\
            UNSG32 uIntAxiRespError_IntAxiRespError_0i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_1i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_2i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_3i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_4i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_5i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_6i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_7i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_8i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_9i         :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_10i        :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_11i        :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_12i        :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_13i        :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_14i        :  1;\
            UNSG32 uIntAxiRespError_IntAxiRespError_15i        :  1;\
            UNSG32 RSVDx40_b16                                 : 16;\
          }
    union { UNSG32 u32CopyDmaReg_IntAxiRespError;
            struct w32CopyDmaReg_IntAxiRespError;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask(r32) _BFGET_(r32,15, 0)
    #define   SET32CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask(r32,v) _BFSET_(r32,15, 0,v)
    #define   GET16CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask(r16) _BFGET_(r16,15, 0)
    #define   SET16CopyDmaReg_IntAxiRespErrorMask_IntAxiRespErrorMask(r16,v) _BFSET_(r16,15, 0,v)

    #define     w32CopyDmaReg_IntAxiRespErrorMask              {\
            UNSG32 uIntAxiRespErrorMask_IntAxiRespErrorMask    : 16;\
            UNSG32 RSVDx44_b16                                 : 16;\
          }
    union { UNSG32 u32CopyDmaReg_IntAxiRespErrorMask;
            struct w32CopyDmaReg_IntAxiRespErrorMask;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx48                                     [184];
    ///////////////////////////////////////////////////////////
              SIE_CopyDmaListCfg                               ie_ListCfg[8];
    ///////////////////////////////////////////////////////////
    } SIE_CopyDmaReg;

    typedef union  T32CopyDmaReg_Enable
          { UNSG32 u32;
            struct w32CopyDmaReg_Enable;
                 } T32CopyDmaReg_Enable;
    typedef union  T32CopyDmaReg_ClockControl
          { UNSG32 u32;
            struct w32CopyDmaReg_ClockControl;
                 } T32CopyDmaReg_ClockControl;
    typedef union  T32CopyDmaReg_ListBusy
          { UNSG32 u32;
            struct w32CopyDmaReg_ListBusy;
                 } T32CopyDmaReg_ListBusy;
    typedef union  T32CopyDmaReg_IntTaskDone
          { UNSG32 u32;
            struct w32CopyDmaReg_IntTaskDone;
                 } T32CopyDmaReg_IntTaskDone;
    typedef union  T32CopyDmaReg_IntTaskDoneMask
          { UNSG32 u32;
            struct w32CopyDmaReg_IntTaskDoneMask;
                 } T32CopyDmaReg_IntTaskDoneMask;
    typedef union  T32CopyDmaReg_IntStartError
          { UNSG32 u32;
            struct w32CopyDmaReg_IntStartError;
                 } T32CopyDmaReg_IntStartError;
    typedef union  T32CopyDmaReg_IntStartErrorMask
          { UNSG32 u32;
            struct w32CopyDmaReg_IntStartErrorMask;
                 } T32CopyDmaReg_IntStartErrorMask;
    typedef union  T32CopyDmaReg_IntAxiRespError
          { UNSG32 u32;
            struct w32CopyDmaReg_IntAxiRespError;
                 } T32CopyDmaReg_IntAxiRespError;
    typedef union  T32CopyDmaReg_IntAxiRespErrorMask
          { UNSG32 u32;
            struct w32CopyDmaReg_IntAxiRespErrorMask;
                 } T32CopyDmaReg_IntAxiRespErrorMask;
    ///////////////////////////////////////////////////////////

    typedef union  TCopyDmaReg_Enable
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_Enable;
                   };
                 } TCopyDmaReg_Enable;
    typedef union  TCopyDmaReg_ClockControl
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_ClockControl;
                   };
                 } TCopyDmaReg_ClockControl;
    typedef union  TCopyDmaReg_ListBusy
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_ListBusy;
                   };
                 } TCopyDmaReg_ListBusy;
    typedef union  TCopyDmaReg_IntTaskDone
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_IntTaskDone;
                   };
                 } TCopyDmaReg_IntTaskDone;
    typedef union  TCopyDmaReg_IntTaskDoneMask
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_IntTaskDoneMask;
                   };
                 } TCopyDmaReg_IntTaskDoneMask;
    typedef union  TCopyDmaReg_IntStartError
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_IntStartError;
                   };
                 } TCopyDmaReg_IntStartError;
    typedef union  TCopyDmaReg_IntStartErrorMask
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_IntStartErrorMask;
                   };
                 } TCopyDmaReg_IntStartErrorMask;
    typedef union  TCopyDmaReg_IntAxiRespError
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_IntAxiRespError;
                   };
                 } TCopyDmaReg_IntAxiRespError;
    typedef union  TCopyDmaReg_IntAxiRespErrorMask
          { UNSG32 u32[1];
            struct {
            struct w32CopyDmaReg_IntAxiRespErrorMask;
                   };
                 } TCopyDmaReg_IntAxiRespErrorMask;

    ///////////////////////////////////////////////////////////
     SIGN32 CopyDmaReg_drvrd(SIE_CopyDmaReg *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CopyDmaReg_drvwr(SIE_CopyDmaReg *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CopyDmaReg_reset(SIE_CopyDmaReg *p);
     SIGN32 CopyDmaReg_cmp  (SIE_CopyDmaReg *p, SIE_CopyDmaReg *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CopyDmaReg_check(p,pie,pfx,hLOG) CopyDmaReg_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CopyDmaReg_print(p,    pfx,hLOG) CopyDmaReg_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CopyDmaReg
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: CopyDma.h
////////////////////////////////////////////////////////////

