/********************************************************************************
 * 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: GaloisLiteDmaMap.h
////////////////////////////////////////////////////////////
#ifndef GaloisLiteDmaMap_h
#define GaloisLiteDmaMap_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 GaloisDmaID                              (4,4)
///     # # ----------------------------------------------------------
///               : dmaChannel         0x0
///               : hboChannel         0x1
///                            ###
///                            * Channel type can be either DMA (0) or HBO (1)
///                            ###
///               : maskDma            0xF00
///               : vproID             0x0
///               : avioID             0x100
///                            ###
///                            * Use (id & maskDma)==vproID or avioID to determine
///                            * if channel belongs to vPro or Avio
///                            ###
///               : maskChannel        0xFF
///               : vproNum            0x13
///               : avioNum            0xD
///                            ###
///                            * Use (id & maskChannel) to match with the following channel IDs
///                            * vPro DMA, 5 Channels
///                            ###
///               : vProDma_start      0x0
///               : vProDma_num        0x5
///               : vProDma_end        0x4
///                            ###
///                            * Total 7 vPro DMA channels; id = 0x000 ~ 0x006
///                            ###
///               : m2h_copy           0x0
///               : m2h_copy_type      0x0
///               : m2h_copy_size      0x80
///                            ###
///                            * Load data from any memory mapped source on XBAR
///                            * Type: DMA
///                            * Size: 1Kb (128 byte)
///                            * Connection: DDR/PCIe-> copy engine
///                            * Semaphore: N/A
///                            ###
///               : h2m_copy           0x1
///               : h2m_copy_type      0x0
///               : h2m_copy_size      0x80
///                            ###
///                            * Send data to any memory mapped target on XBAR
///                            * Type: DMA
///                            * Size: 1Kb (128B)
///                            * Connection: copy engine -> DDR/PCIe
///                            * Semaphore: N/A
///                            ###
///               : m2h_P3dbIn         0x2
///               : m2h_P3dbIn_type    0x0
///               : m2h_P3dbIn_size    0x80
///                            ###
///                            * Deblocking filter pixel context fetching for VC-1
///                            * Type: DMA
///                            * Size: 1Kb (128B)
///                            * Connection: DDR->PCube
///                            * Semaphore: P3db (consumer)
///                            ###
///               : h2m_P3dbOut        0x3
///               : m2h_P3dbOut_type   0x0
///               : m2h_P3dbOut_size   0x80
///                            ###
///                            * Deblocking filter pixel context storing for VC-1
///                            * Type: DMA
///                            * Size: 1Kb (128B)
///                            * Connection: PCube -> DDR
///                            * Semaphore: P3db (producer)
///                            ###
///               : m2h_vesIn          0x4
///               : m2h_vesIn_type     0x0
///               : m2h_vesIn_size     0x100
///                            ###
///                            * VES fetching
///                            * Type: DMA
///                            * Size: 2048b (256B)
///                            * Connection: DDR -> VLD
///                            * Semaphore: vesFIFO (consumer)
///                            * vScope HBO, 7 channels
///                            ###
///               : vScopeHbo_start    0x5
///               : vScopeHbo_num      0x7
///               : vScopeHbo_end      0xB
///                            ###
///                            * Total 7 vScope HBO channels; ID = 0x005 ~ 0x00B
///                            ###
///               : vScope_hctxOut     0x5
///               : vScope_hctxOut_type 0x1
///               : vScope_hctxOut_size 0x40
///                            ###
///                            * vScope HCTX out
///                            * Type: HBO
///                            * Size: 512b (64B)
///                            * Connection: FIGO0->vPro_hctx8
///                            ###
///               : vScope_hctxIn      0x6
///               : vScope_hctxIn_type 0x1
///               : vScope_hctxIn_size 0x40
///                            ###
///                            * vScope HCTX in
///                            * Type: HBO
///                            * Size: 512b (64B)
///                            * Connection: vPro_hctx->FIGO0
///                            ###
///               : vScope_ds          0x7
///               : vScope_ds_type     0x1
///               : vScope_ds_size     0x80
///                            ###
///                            * vScope data streamer command
///                            * Type: HBO
///                            * Size: 1Kb (128B), or 16 entries
///                            * Connection: FIGO0 -> Data Streamer
///                            ###
///               : vScope_p3Msg       0x8
///               : vScope_p3Msg_type  0x1
///               : vScope_p3Msg_size  0x400
///                            ###
///                            * pCube messages
///                            * Type: HBO
///                            * Size: 8Kb (1KB)
///                            * Connection: FIGO0 -> vPro_p3Msg
///                            ###
///               : vScope_vcMsg       0x9
///               : vScope_vcMsg_type  0x1
///               : vScope_vcMsg_size  0x400
///                            ###
///                            * vCache messages
///                            * Type: HBO
///                            * Size: 8Kb (1KB)
///                            * Connection: FIGO0 -> vPro_vcMsg
///                            ###
///               : vScope_fop         0xA
///               : vScope_fop_type    0x1
///               : vScope_fop_size    0x400
///                            ###
///                            * FOP messages
///                            * Type: HBO
///                            * Size: 8Kb (1KB)
///                            * Connection: FIGO1 -> vPro_fop
///                            ###
///               : vScope_tc          0xB
///               : vScope_tc_type     0x1
///               : vScope_tc_size     0x800
///                            ###
///                            * Transform Coefficients
///                            * Type: HBO
///                            * Size: 16Kb (2KB)
///                            * Connection: FIGO1->vPro_tc
///                            * vPro HBO, 7 channels
///                            ###
///               : vProHbo_start      0xC
///               : vProHbo_num        0x7
///               : vProHbo_end        0x12
///                            ###
///                            * Total 7 vPro HBO channels, ID = 0x00C ~ 0x012
///                            ###
///               : vPro_hctx          0xC
///               : vPro_hctx_type     0x1
///               : vPro_hctx_size     0x4000
///                            ###
///                            * HCTX
///                            * Type: HBO
///                            * Size: 128Kb (16KB)
///                            * Connection: vPro_hctx<->vScope_hctx
///                            ###
///               : vPro_p3Msg         0xD
///               : vPro_p3Msg_type    0x1
///               : vPro_p3Msg_size    0x1000
///                            ###
///                            * PCube messages
///                            * Type: HBO
///                            * Size: 32Kb (4KB)
///                            * Connection: vScope_p3Msg->PCube
///                            ###
///               : vPro_vcMsg         0xE
///               : vPro_vcMsg_type    0x1
///               : vPro_vcMsg_size    0x1000
///                            ###
///                            * vCache messages
///                            * Type: HBO
///                            * Size: 32Kb (4KB)
///                            * Connection: vScope_vcMsg->vCache
///                            ###
///               : vPro_fop           0xF
///               : vPro_fop_type      0x1
///               : vPro_fop_size      0x1000
///                            ###
///                            * FOP
///                            * Type: HBO
///                            * Size: 32Kb (4KB)
///                            * Connection: vScope_fop->PCube
///                            ###
///               : vPro_tc            0x10
///               : vPro_tc_type       0x1
///               : vPro_tc_size       0x4000
///                            ###
///                            * Transform coefficients
///                            * Type: HBO
///                            * Size: 128Kb (16KB)
///                            * Connection: vScope_tc->PCube
///                            ###
///               : vPro_db            0x11
///               : vPro_db_type       0x1
///               : vPro_db_size       0x8000
///                            ###
///                            * H.264 Deblocking context
///                            * Type: HBO
///                            * Size: 256Kb (32KB)
///                            * Connection: PCube<->PCube
///                            ###
///               : vPro_ip            0x12
///               : vPro_ip_type       0x1
///               : vPro_ip_size       0x2000
///                            ###
///                            * H.264 Intra prediction context
///                            * Type: HBO
///                            * Size: 64Kb (8KB)
///                            * Connection: PCube<->PCube
///                            * AVIO DMA, 13 channels
///                            ###
///               : avioDma_start      0x100
///               : avioDma_num        0xD
///               : avioDma_end        0x10C
///                            ###
///                            * Total 13 AVIO DMA channels; ID = 0x00 ~ 0x0C (after mask)
///                            ###
///               : m2h_i2sOutMain_0   0x100
///               : m2h_i2sOutMain_0_type 0x0
///               : m2h_i2sOutMain_0_size 0x200
///                            ###
///                            * For I2S main audio output (7.1)
///                            * Type: DMA
///                            * Size: 4Kb (512B)
///                            * Connection: DDR -> i2s.main[0]
///                            * Semaphore: i2sOutMain_0 (consumer)
///                            ###
///               : m2h_i2sOutMain_1   0x101
///               : m2h_i2sOutMain_1_type 0x0
///               : m2h_i2sOutMain_1_size 0x200
///                            ###
///                            * For I2S main audio output (7.1)
///                            * Type: DMA
///                            * Size: 4Kb (512B)
///                            * Connection: DDR -> i2s.main[1]
///                            * Semaphore: i2sOutMain_1 (consumer)
///                            ###
///               : m2h_i2sOutMain_2   0x102
///               : m2h_i2sOutMain_2_type 0x0
///               : m2h_i2sOutMain_2_size 0x200
///                            ###
///                            * For I2S main audio output (7.1)
///                            * Type: DMA
///                            * Size: 4Kb (512B)
///                            * Connection: DDR -> i2s.main[2]
///                            * Semaphore: i2sOutMain_2 (consumer)
///                            ###
///               : m2h_i2sOutMain_3   0x103
///               : m2h_i2sOutMain_3_type 0x0
///               : m2h_i2sOutMain_3_size 0x200
///                            ###
///                            * For I2S main audio output (7.1)
///                            * Type: DMA
///                            * Size: 4Kb (512B)
///                            * Connection: DDR -> i2s.main[3]
///                            * Semaphore: i2sOutMain_3 (consumer)
///                            ###
///               : m2h_i2sOut2nd      0x104
///               : m2h_i2sOut2nd_type 0x0
///               : m2h_i2sOut2nd_size 0x200
///                            ###
///                            * For I2S 2nd audio output (stereo)
///                            * Type: DMA
///                            * Size: 4Kb (512B)
///                            * Connection: DDR -> i2s.2nd
///                            * Semaphore: i2sOut2nd (consumer)
///                            ###
///               : m2h_SPDIF          0x105
///               : m2h_SPDIF_type     0x0
///               : m2h_SPDIF_size     0x100
///                            ###
///                            * For SPDIF audio output
///                            * Type: DMA
///                            * Size: 2Kb (256B)
///                            * Connection: DDR -> SPDIF
///                            * Semaphore: SPDIF (consumer)
///                            ###
///               : h2m_i2sIn          0x106
///               : h2m_i2sIn_type     0x0
///               : h2m_i2sIn_size     0x100
///                            ###
///                            * For I2S audio input (stereo)
///                            * Type: DMA
///                            * Size: 2Kb (256B)
///                            * Connection: i2s.in -> DDR
///                            * Semaphore: i2sIn (producer)
///                            ###
///               : h2m_tsi            0x107
///               : h2m_tsi_type       0x0
///               : h2m_tsi_size       0x600
///                            ###
///                            * For TSI raw input
///                            * Type: DMA
///                            * Size: 12Kb (1536B)
///                            * Connection: TSI -> DDR
///                            * Semaphore: tsi (producer)
///                            ###
///               : m2h_vmain          0x108
///               : m2h_vmain_type     0x0
///               : m2h_vmain_size     0x800
///                            ###
///                            * For main video (YUV422) output
///                            * Type: DMA
///                            * Size: 16Kb (2KB)
///                            * Connection: DDR -> vop.main
///                            * Semaphore: N/A
///                            ###
///               : m2h_v2nd           0x109
///               : m2h_v2nd_type      0x0
///               : m2h_v2nd_size      0x800
///                            ###
///                            * For 2nd video (YUV422) output
///                            * Type: DMA
///                            * Size: 16Kb (2KB)
///                            * Connection: DDR -> vop.2nd
///                            * Semaphore: N/A
///                            ###
///               : m2h_subtitle       0x10A
///               : m2h_subtitle_type  0x0
///               : m2h_subtitle_size  0x600
///                            ###
///                            * For sub-title (RGB graphic) output
///                            * Type: DMA
///                            * Size: 12Kb (1536B)
///                            * Connection: DDR -> vop.osd.gfx0
///                            * Semaphore: N/A
///                            ###
///               : m2h_OSD            0x10B
///               : m2h_OSD_type       0x0
///               : m2h_OSD_size       0x600
///                            ###
///                            * For application OSD (RGB graphic) output
///                            * Type: DMA
///                            * Size: 12Kb (1536B)
///                            * Connection: DDR -> vop.osd.gfx1
///                            * Semaphore: N/A
///                            ###
///               : m2h_cursor         0x10C
///               : m2h_cursor_type    0x0
///               : m2h_cursor_size    0x200
///                            ###
///                            * For cursor (RGB graphic) output
///                            * Type: DMA
///                            * Size: 4Kb (assuming no wider than 256) (512B)
///                            * Connection: DDR -> vop.osd.cursor
///                            * Semaphore: N/A
///                            ###
///     @ 0x00000 dummy                (P)
///               %unsigned 1  dummy                     
///               %%        31         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       1b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_GaloisDmaID
#define h_GaloisDmaID (){}

    #define        GaloisDmaID_dmaChannel                      0x0
    #define        GaloisDmaID_hboChannel                      0x1
    #define        GaloisDmaID_maskDma                         0xF00
    #define        GaloisDmaID_vproID                          0x0
    #define        GaloisDmaID_avioID                          0x100
    #define        GaloisDmaID_maskChannel                     0xFF
    #define        GaloisDmaID_vproNum                         0x13
    #define        GaloisDmaID_avioNum                         0xD
    #define        GaloisDmaID_vProDma_start                   0x0
    #define        GaloisDmaID_vProDma_num                     0x5
    #define        GaloisDmaID_vProDma_end                     0x4
    #define        GaloisDmaID_m2h_copy                        0x0
    #define        GaloisDmaID_m2h_copy_type                   0x0
    #define        GaloisDmaID_m2h_copy_size                   0x80
    #define        GaloisDmaID_h2m_copy                        0x1
    #define        GaloisDmaID_h2m_copy_type                   0x0
    #define        GaloisDmaID_h2m_copy_size                   0x80
    #define        GaloisDmaID_m2h_P3dbIn                      0x2
    #define        GaloisDmaID_m2h_P3dbIn_type                 0x0
    #define        GaloisDmaID_m2h_P3dbIn_size                 0x80
    #define        GaloisDmaID_h2m_P3dbOut                     0x3
    #define        GaloisDmaID_m2h_P3dbOut_type                0x0
    #define        GaloisDmaID_m2h_P3dbOut_size                0x80
    #define        GaloisDmaID_m2h_vesIn                       0x4
    #define        GaloisDmaID_m2h_vesIn_type                  0x0
    #define        GaloisDmaID_m2h_vesIn_size                  0x100
    #define        GaloisDmaID_vScopeHbo_start                 0x5
    #define        GaloisDmaID_vScopeHbo_num                   0x7
    #define        GaloisDmaID_vScopeHbo_end                   0xB
    #define        GaloisDmaID_vScope_hctxOut                  0x5
    #define        GaloisDmaID_vScope_hctxOut_type             0x1
    #define        GaloisDmaID_vScope_hctxOut_size             0x40
    #define        GaloisDmaID_vScope_hctxIn                   0x6
    #define        GaloisDmaID_vScope_hctxIn_type              0x1
    #define        GaloisDmaID_vScope_hctxIn_size              0x40
    #define        GaloisDmaID_vScope_ds                       0x7
    #define        GaloisDmaID_vScope_ds_type                  0x1
    #define        GaloisDmaID_vScope_ds_size                  0x80
    #define        GaloisDmaID_vScope_p3Msg                    0x8
    #define        GaloisDmaID_vScope_p3Msg_type               0x1
    #define        GaloisDmaID_vScope_p3Msg_size               0x400
    #define        GaloisDmaID_vScope_vcMsg                    0x9
    #define        GaloisDmaID_vScope_vcMsg_type               0x1
    #define        GaloisDmaID_vScope_vcMsg_size               0x400
    #define        GaloisDmaID_vScope_fop                      0xA
    #define        GaloisDmaID_vScope_fop_type                 0x1
    #define        GaloisDmaID_vScope_fop_size                 0x400
    #define        GaloisDmaID_vScope_tc                       0xB
    #define        GaloisDmaID_vScope_tc_type                  0x1
    #define        GaloisDmaID_vScope_tc_size                  0x800
    #define        GaloisDmaID_vProHbo_start                   0xC
    #define        GaloisDmaID_vProHbo_num                     0x7
    #define        GaloisDmaID_vProHbo_end                     0x12
    #define        GaloisDmaID_vPro_hctx                       0xC
    #define        GaloisDmaID_vPro_hctx_type                  0x1
    #define        GaloisDmaID_vPro_hctx_size                  0x4000
    #define        GaloisDmaID_vPro_p3Msg                      0xD
    #define        GaloisDmaID_vPro_p3Msg_type                 0x1
    #define        GaloisDmaID_vPro_p3Msg_size                 0x1000
    #define        GaloisDmaID_vPro_vcMsg                      0xE
    #define        GaloisDmaID_vPro_vcMsg_type                 0x1
    #define        GaloisDmaID_vPro_vcMsg_size                 0x1000
    #define        GaloisDmaID_vPro_fop                        0xF
    #define        GaloisDmaID_vPro_fop_type                   0x1
    #define        GaloisDmaID_vPro_fop_size                   0x1000
    #define        GaloisDmaID_vPro_tc                         0x10
    #define        GaloisDmaID_vPro_tc_type                    0x1
    #define        GaloisDmaID_vPro_tc_size                    0x4000
    #define        GaloisDmaID_vPro_db                         0x11
    #define        GaloisDmaID_vPro_db_type                    0x1
    #define        GaloisDmaID_vPro_db_size                    0x8000
    #define        GaloisDmaID_vPro_ip                         0x12
    #define        GaloisDmaID_vPro_ip_type                    0x1
    #define        GaloisDmaID_vPro_ip_size                    0x2000
    #define        GaloisDmaID_avioDma_start                   0x100
    #define        GaloisDmaID_avioDma_num                     0xD
    #define        GaloisDmaID_avioDma_end                     0x10C
    #define        GaloisDmaID_m2h_i2sOutMain_0                0x100
    #define        GaloisDmaID_m2h_i2sOutMain_0_type           0x0
    #define        GaloisDmaID_m2h_i2sOutMain_0_size           0x200
    #define        GaloisDmaID_m2h_i2sOutMain_1                0x101
    #define        GaloisDmaID_m2h_i2sOutMain_1_type           0x0
    #define        GaloisDmaID_m2h_i2sOutMain_1_size           0x200
    #define        GaloisDmaID_m2h_i2sOutMain_2                0x102
    #define        GaloisDmaID_m2h_i2sOutMain_2_type           0x0
    #define        GaloisDmaID_m2h_i2sOutMain_2_size           0x200
    #define        GaloisDmaID_m2h_i2sOutMain_3                0x103
    #define        GaloisDmaID_m2h_i2sOutMain_3_type           0x0
    #define        GaloisDmaID_m2h_i2sOutMain_3_size           0x200
    #define        GaloisDmaID_m2h_i2sOut2nd                   0x104
    #define        GaloisDmaID_m2h_i2sOut2nd_type              0x0
    #define        GaloisDmaID_m2h_i2sOut2nd_size              0x200
    #define        GaloisDmaID_m2h_SPDIF                       0x105
    #define        GaloisDmaID_m2h_SPDIF_type                  0x0
    #define        GaloisDmaID_m2h_SPDIF_size                  0x100
    #define        GaloisDmaID_h2m_i2sIn                       0x106
    #define        GaloisDmaID_h2m_i2sIn_type                  0x0
    #define        GaloisDmaID_h2m_i2sIn_size                  0x100
    #define        GaloisDmaID_h2m_tsi                         0x107
    #define        GaloisDmaID_h2m_tsi_type                    0x0
    #define        GaloisDmaID_h2m_tsi_size                    0x600
    #define        GaloisDmaID_m2h_vmain                       0x108
    #define        GaloisDmaID_m2h_vmain_type                  0x0
    #define        GaloisDmaID_m2h_vmain_size                  0x800
    #define        GaloisDmaID_m2h_v2nd                        0x109
    #define        GaloisDmaID_m2h_v2nd_type                   0x0
    #define        GaloisDmaID_m2h_v2nd_size                   0x800
    #define        GaloisDmaID_m2h_subtitle                    0x10A
    #define        GaloisDmaID_m2h_subtitle_type               0x0
    #define        GaloisDmaID_m2h_subtitle_size               0x600
    #define        GaloisDmaID_m2h_OSD                         0x10B
    #define        GaloisDmaID_m2h_OSD_type                    0x0
    #define        GaloisDmaID_m2h_OSD_size                    0x600
    #define        GaloisDmaID_m2h_cursor                      0x10C
    #define        GaloisDmaID_m2h_cursor_type                 0x0
    #define        GaloisDmaID_m2h_cursor_size                 0x200
    ///////////////////////////////////////////////////////////
    #define     RA_GaloisDmaID_dummy                           0x0000

    #define     BA_GaloisDmaID_dummy_dummy                     0x0000
    #define     B16GaloisDmaID_dummy_dummy                     0x0000
    #define   LSb32GaloisDmaID_dummy_dummy                        0
    #define   LSb16GaloisDmaID_dummy_dummy                        0
    #define       bGaloisDmaID_dummy_dummy                     1
    #define   MSK32GaloisDmaID_dummy_dummy                        0x00000001
    ///////////////////////////////////////////////////////////

    typedef struct SIE_GaloisDmaID {
    ///////////////////////////////////////////////////////////
    #define   GET32GaloisDmaID_dummy_dummy(r32)                _BFGET_(r32, 0, 0)
    #define   SET32GaloisDmaID_dummy_dummy(r32,v)              _BFSET_(r32, 0, 0,v)
    #define   GET16GaloisDmaID_dummy_dummy(r16)                _BFGET_(r16, 0, 0)
    #define   SET16GaloisDmaID_dummy_dummy(r16,v)              _BFSET_(r16, 0, 0,v)

    #define     w32GaloisDmaID_dummy                           {\
            UNSG32 udummy_dummy                                :  1;\
            UNSG32 RSVDx0_b1                                   : 31;\
          }
    union { UNSG32 u32GaloisDmaID_dummy;
            struct w32GaloisDmaID_dummy;
          };
    ///////////////////////////////////////////////////////////
    } SIE_GaloisDmaID;

    typedef union  T32GaloisDmaID_dummy
          { UNSG32 u32;
            struct w32GaloisDmaID_dummy;
                 } T32GaloisDmaID_dummy;
    ///////////////////////////////////////////////////////////

    typedef union  TGaloisDmaID_dummy
          { UNSG32 u32[1];
            struct {
            struct w32GaloisDmaID_dummy;
                   };
                 } TGaloisDmaID_dummy;

    ///////////////////////////////////////////////////////////
     SIGN32 GaloisDmaID_drvrd(SIE_GaloisDmaID *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 GaloisDmaID_drvwr(SIE_GaloisDmaID *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void GaloisDmaID_reset(SIE_GaloisDmaID *p);
     SIGN32 GaloisDmaID_cmp  (SIE_GaloisDmaID *p, SIE_GaloisDmaID *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define GaloisDmaID_check(p,pie,pfx,hLOG) GaloisDmaID_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define GaloisDmaID_print(p,    pfx,hLOG) GaloisDmaID_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: GaloisDmaID
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE GaloisSemID                              (4,4)
///     # # ----------------------------------------------------------
///               : maskSem            0xF00
///               : vproID             0x0
///               : avioID             0x100
///               : maskChannel        0xFF
///               : vproNum            0x18
///               : avioNum            0x18
///                            ###
///                            * 'vpro-semaphore' channels
///                            ###
///               : cpu1_cpu2          0x0
///                            ###
///                            * Producer: CPU1; consumer: CPU2
///                            ###
///               : cpu2_cpu1          0x1
///                            ###
///                            * Producer: CPU2; consumer: CPU1
///                            ###
///               : vScope             0x2
///                            ###
///                            * Producer & consumer: vScope FIGOs
///                            ###
///               : cpu1               0x3
///                            ###
///                            * Producer & consumer: CPU1
///                            ###
///               : P3db               0x4
///                            ###
///                            * Producer: dma.m2h_P3dbOut; consumer: P3dbIn
///                            ###
///               : vesFifo            0x5
///                            ###
///                            * Producer: CPU1; consumer: dma.m2h_vesIn
///                            ###
///               : P3Dbg              0x6
///                            ###
///                            * Producer & consumer: PCube (debugging port)
///                            ###
///               : RSVD07             0x7
///               : RSVD08             0x8
///               : RSVD09             0x9
///               : RSVD0A             0xA
///               : RSVD0B             0xB
///               : RSVD0C             0xC
///               : RSVD0D             0xD
///               : RSVD0E             0xE
///                            ###
///                            * Reserved for either F/W or PCube to use
///                            ###
///               : dspWb              0xF
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : dbIn               0x10
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : dbWb               0x11
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : ipIn               0x12
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : ipWb               0x13
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : tcIn               0x14
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : fopLd              0x15
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : refIn              0x16
///                            ###
///                            * Producer & Consumer: PCube -> PCube
///                            ###
///               : P3EOF              0x17
///                            ###
///                            * Producer & Consumer: PCube -> CPU2
///                            * 'avio-semaphore'
///                            ###
///               : cpu0_cpu1          0x100
///                            ###
///                            * Producer & Consumer: CPU0 -> CPU1
///                            ###
///               : cpu1_cpu0          0x101
///                            ###
///                            * Producer & Consumer: CPU1 -> CPU0
///                            * RSVD02
///                            * 0x102
///                            * RSVD03
///                            * 0x103
///                            * RSVD04
///                            * 0x104
///                            * RSVD05
///                            * 0x105
///                            * RSVD06
///                            * 0x106
///                            * RSVD07
///                            * 0x107
///                            * RSVD08
///                            * 0x108
///                            * RSVD09
///                            * 0x109
///                            * RSVD0A
///                            * 0x10A
///                            * RSVD0B
///                            * 0x10B
///                            * RSVD0C
///                            * 0x10C
///                            * RSVD0D
///                            * 0x10D
///                            * RSVD0E
///                            * 0x10E
///                            * RSVD0F
///                            * 0x10F
///                            * Reserved for F/W to use
///                            ###
///               : i2sOutMain_0       0x110
///                            ###
///                            * Producer & Consumer: CPU1 -> dma.i2sOutMain_0
///                            ###
///               : i2sOutMain_1       0x111
///                            ###
///                            * Producer & Consumer: CPU1 -> dma.i2sOutMain_1
///                            ###
///               : i2sOutMain_2       0x112
///                            ###
///                            * Producer & Consumer: CPU1 -> dma.i2sOutMain_2
///                            ###
///               : i2sOutMain_3       0x113
///                            ###
///                            * Producer & Consumer: CPU1 -> dma.i2sOutMain_3
///                            ###
///               : i2sOut2nd          0x114
///                            ###
///                            * Producer & Consumer: CPU1 -> dma.i2sOut2nd
///                            ###
///               : SPDIF              0x115
///                            ###
///                            * Producer & Consumer: CPU1 -> dma.SPDIF
///                            ###
///               : i2sIn              0x116
///                            ###
///                            * Producer & Consumer: dma.i2sIn -> CPU1
///                            ###
///               : tsi                0x117
///                            ###
///                            * Producer & Consumer: dma.tsi -> CPU1
///                            ###
///     @ 0x00000 vpro                 (P)
///               %unsigned 16 SemaphoreNum              0x18
///               %%        16         # Stuffing bits...
///     @ 0x00004 avio                 (P)
///               %unsigned 16 SemaphoreNum              0x18
///               %%        16         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_GaloisSemID
#define h_GaloisSemID (){}

    #define        GaloisSemID_maskSem                         0xF00
    #define        GaloisSemID_vproID                          0x0
    #define        GaloisSemID_avioID                          0x100
    #define        GaloisSemID_maskChannel                     0xFF
    #define        GaloisSemID_vproNum                         0x18
    #define        GaloisSemID_avioNum                         0x18
    #define        GaloisSemID_cpu1_cpu2                       0x0
    #define        GaloisSemID_cpu2_cpu1                       0x1
    #define        GaloisSemID_vScope                          0x2
    #define        GaloisSemID_cpu1                            0x3
    #define        GaloisSemID_P3db                            0x4
    #define        GaloisSemID_vesFifo                         0x5
    #define        GaloisSemID_P3Dbg                           0x6
    #define        GaloisSemID_RSVD07                          0x7
    #define        GaloisSemID_RSVD08                          0x8
    #define        GaloisSemID_RSVD09                          0x9
    #define        GaloisSemID_RSVD0A                          0xA
    #define        GaloisSemID_RSVD0B                          0xB
    #define        GaloisSemID_RSVD0C                          0xC
    #define        GaloisSemID_RSVD0D                          0xD
    #define        GaloisSemID_RSVD0E                          0xE
    #define        GaloisSemID_dspWb                           0xF
    #define        GaloisSemID_dbIn                            0x10
    #define        GaloisSemID_dbWb                            0x11
    #define        GaloisSemID_ipIn                            0x12
    #define        GaloisSemID_ipWb                            0x13
    #define        GaloisSemID_tcIn                            0x14
    #define        GaloisSemID_fopLd                           0x15
    #define        GaloisSemID_refIn                           0x16
    #define        GaloisSemID_P3EOF                           0x17
    #define        GaloisSemID_cpu0_cpu1                       0x100
    #define        GaloisSemID_cpu1_cpu0                       0x101
    #define        GaloisSemID_i2sOutMain_0                    0x110
    #define        GaloisSemID_i2sOutMain_1                    0x111
    #define        GaloisSemID_i2sOutMain_2                    0x112
    #define        GaloisSemID_i2sOutMain_3                    0x113
    #define        GaloisSemID_i2sOut2nd                       0x114
    #define        GaloisSemID_SPDIF                           0x115
    #define        GaloisSemID_i2sIn                           0x116
    #define        GaloisSemID_tsi                             0x117
    ///////////////////////////////////////////////////////////
    #define     RA_GaloisSemID_vpro                            0x0000

    #define     BA_GaloisSemID_vpro_SemaphoreNum               0x0000
    #define     B16GaloisSemID_vpro_SemaphoreNum               0x0000
    #define   LSb32GaloisSemID_vpro_SemaphoreNum                  0
    #define   LSb16GaloisSemID_vpro_SemaphoreNum                  0
    #define       bGaloisSemID_vpro_SemaphoreNum               16
    #define   MSK32GaloisSemID_vpro_SemaphoreNum                  0x0000FFFF
    ///////////////////////////////////////////////////////////
    #define     RA_GaloisSemID_avio                            0x0004

    #define     BA_GaloisSemID_avio_SemaphoreNum               0x0004
    #define     B16GaloisSemID_avio_SemaphoreNum               0x0004
    #define   LSb32GaloisSemID_avio_SemaphoreNum                  0
    #define   LSb16GaloisSemID_avio_SemaphoreNum                  0
    #define       bGaloisSemID_avio_SemaphoreNum               16
    #define   MSK32GaloisSemID_avio_SemaphoreNum                  0x0000FFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_GaloisSemID {
    ///////////////////////////////////////////////////////////
    #define   GET32GaloisSemID_vpro_SemaphoreNum(r32)          _BFGET_(r32,15, 0)
    #define   SET32GaloisSemID_vpro_SemaphoreNum(r32,v)        _BFSET_(r32,15, 0,v)
    #define   GET16GaloisSemID_vpro_SemaphoreNum(r16)          _BFGET_(r16,15, 0)
    #define   SET16GaloisSemID_vpro_SemaphoreNum(r16,v)        _BFSET_(r16,15, 0,v)

    #define     w32GaloisSemID_vpro                            {\
            UNSG32 uvpro_SemaphoreNum                          : 16;\
            UNSG32 RSVDx0_b16                                  : 16;\
          }
    union { UNSG32 u32GaloisSemID_vpro;
            struct w32GaloisSemID_vpro;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32GaloisSemID_avio_SemaphoreNum(r32)          _BFGET_(r32,15, 0)
    #define   SET32GaloisSemID_avio_SemaphoreNum(r32,v)        _BFSET_(r32,15, 0,v)
    #define   GET16GaloisSemID_avio_SemaphoreNum(r16)          _BFGET_(r16,15, 0)
    #define   SET16GaloisSemID_avio_SemaphoreNum(r16,v)        _BFSET_(r16,15, 0,v)

    #define     w32GaloisSemID_avio                            {\
            UNSG32 uavio_SemaphoreNum                          : 16;\
            UNSG32 RSVDx4_b16                                  : 16;\
          }
    union { UNSG32 u32GaloisSemID_avio;
            struct w32GaloisSemID_avio;
          };
    ///////////////////////////////////////////////////////////
    } SIE_GaloisSemID;

    typedef union  T32GaloisSemID_vpro
          { UNSG32 u32;
            struct w32GaloisSemID_vpro;
                 } T32GaloisSemID_vpro;
    typedef union  T32GaloisSemID_avio
          { UNSG32 u32;
            struct w32GaloisSemID_avio;
                 } T32GaloisSemID_avio;
    ///////////////////////////////////////////////////////////

    typedef union  TGaloisSemID_vpro
          { UNSG32 u32[1];
            struct {
            struct w32GaloisSemID_vpro;
                   };
                 } TGaloisSemID_vpro;
    typedef union  TGaloisSemID_avio
          { UNSG32 u32[1];
            struct {
            struct w32GaloisSemID_avio;
                   };
                 } TGaloisSemID_avio;

    ///////////////////////////////////////////////////////////
     SIGN32 GaloisSemID_drvrd(SIE_GaloisSemID *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 GaloisSemID_drvwr(SIE_GaloisSemID *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void GaloisSemID_reset(SIE_GaloisSemID *p);
     SIGN32 GaloisSemID_cmp  (SIE_GaloisSemID *p, SIE_GaloisSemID *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define GaloisSemID_check(p,pie,pfx,hLOG) GaloisSemID_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define GaloisSemID_print(p,    pfx,hLOG) GaloisSemID_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: GaloisSemID
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: GaloisLiteDmaMap.h
////////////////////////////////////////////////////////////

