/********************************************************************************
 * 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.
 ******************************************************************************/

#include "api_avio_dhub.h"

HDL_dhub2d AG_dhubHandle;
HDL_dhub2d VPP_dhubHandle;
#if (BERLIN_CHIP_VERSION >= BERLIN_BG2)
HDL_dhub2d VIP_dhubHandle;
#endif

#if (BERLIN_CHIP_VERSION >= BERLIN_BG2) && (BERLIN_CHIP_VERSION != BERLIN_BG2CDP)
DHUB_channel_config  VIP_config[VIP_NUM_OF_CHANNELS] = {
	// BANK0
#if (BERLIN_CHIP_VERSION < BERLIN_BG2_DTV)
#if (BERLIN_CHIP_VERSION != BERLIN_BG2_CD)
	{ avioDhubChMap_vip_SD_WR, VIP_DHUB_BANK0_START_ADDR, VIP_DHUB_BANK0_START_ADDR+32, 32, (6144-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
   	{ avioDhubChMap_vip_SD_RE, VIP_DHUB_BANK0_START_ADDR + 6144, VIP_DHUB_BANK0_START_ADDR + 6144+32, 32, (6144-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#endif
#endif

#if (BERLIN_CHIP_VERSION == BERLIN_BG2) // Z1
	// BANK1
	{ avioDhubChMap_vip_HDMI_DWR, VIP_DHUB_BANK1_START_ADDR, VIP_DHUB_BANK1_START_ADDR+32, 32, (1024*4-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_HDMI_AWR0, VIP_DHUB_BANK1_START_ADDR + 4096, VIP_DHUB_BANK1_START_ADDR + 4096+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_HDMI_AWR1, VIP_DHUB_BANK1_START_ADDR + 6144, VIP_DHUB_BANK1_START_ADDR + 6144+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_HDMI_AWR2, VIP_DHUB_BANK1_START_ADDR + 8192, VIP_DHUB_BANK1_START_ADDR + 8192+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_HDMI_AWR3, VIP_DHUB_BANK1_START_ADDR + 10240, VIP_DHUB_BANK1_START_ADDR + 10240+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// BANK2
	{ avioDhubChMap_vip_DVI_WR, VIP_DHUB_BANK2_START_ADDR, VIP_DHUB_BANK2_START_ADDR+32, 32, (1024*12-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// BANK3
	{ avioDhubChMap_vip_VBI_WR, VIP_DHUB_BANK3_START_ADDR, VIP_DHUB_BANK3_START_ADDR+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#elif (BERLIN_CHIP_VERSION == BERLIN_BG2_Z2) //Z2
	// BANK1
	{ avioDhubChMap_vip_DVI_WR, VIP_DHUB_BANK1_START_ADDR, VIP_DHUB_BANK1_START_ADDR+32, 32, (1024*12-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// BANK2
	{ avioDhubChMap_vip_VBI_WR, VIP_DHUB_BANK2_START_ADDR, VIP_DHUB_BANK2_START_ADDR+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	
#elif (BERLIN_CHIP_VERSION == BERLIN_BG2_CD) //CD
	// BANK1
	{ avioDhubChMap_vip_DVI_WR, VIP_DHUB_BANK0_START_ADDR, VIP_DHUB_BANK0_START_ADDR+32, 32, (1024*12-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// BANK2
	{ avioDhubChMap_vip_MIC0_W, VIP_DHUB_BANK1_START_ADDR+1024, VIP_DHUB_BANK1_START_ADDR+1024+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_MIC1_W, VIP_DHUB_BANK1_START_ADDR+1024*2, VIP_DHUB_BANK1_START_ADDR+1024*2+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_MIC2_W, VIP_DHUB_BANK1_START_ADDR+1024*3, VIP_DHUB_BANK1_START_ADDR+1024*3+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_MIC3_W, VIP_DHUB_BANK1_START_ADDR+1024*4, VIP_DHUB_BANK1_START_ADDR+1024*4+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#else // (BERLIN_CHIP_VERSION == BERLIN_BG2_A0) //A0
	// BANK1
#if (BERLIN_CHIP_VERSION < BERLIN_BG2_DTV)
        { avioDhubChMap_vip_DVI_WR, VIP_DHUB_BANK1_START_ADDR, VIP_DHUB_BANK1_START_ADDR+32, 32, (1024*12-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
        // BANK2
        //use 8-byte MTU for VBI data workaround!
        { avioDhubChMap_vip_VBI_WR, VIP_DHUB_BANK2_START_ADDR, VIP_DHUB_BANK2_START_ADDR+32, 32, (1024-32), dHubChannel_CFG_MTU_8byte, 0, 0, 1},
	{ avioDhubChMap_vip_MIC0_W, VIP_DHUB_BANK2_START_ADDR+1024, VIP_DHUB_BANK2_START_ADDR+1024+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vip_MIC1_W, VIP_DHUB_BANK2_START_ADDR+1024*2, VIP_DHUB_BANK2_START_ADDR+1024*2+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1}, 
	{ avioDhubChMap_vip_MIC2_W, VIP_DHUB_BANK2_START_ADDR+1024*3, VIP_DHUB_BANK2_START_ADDR+1024*3+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
        { avioDhubChMap_vip_MIC3_W, VIP_DHUB_BANK2_START_ADDR+1024*4, VIP_DHUB_BANK2_START_ADDR+1024*4+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#endif
#endif
};
#endif

DHUB_channel_config  VPP_config[VPP_NUM_OF_CHANNELS] = {
#if (BERLIN_CHIP_VERSION >= BERLIN_B_0)
#if (BERLIN_CHIP_VERSION != BERLIN_BG2_CD) && (BERLIN_CHIP_VERSION != BERLIN_BG2CDP)
	// BANK0
	{ avioDhubChMap_vpp_MV_R, DHUB_BANK0_START_ADDR, DHUB_BANK0_START_ADDR+32, 32, (2048*2-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
   	{ avioDhubChMap_vpp_MV_FRC_R, DHUB_BANK0_START_ADDR + 2048*2, DHUB_BANK0_START_ADDR + 2048*2+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_MV_FRC_W, DHUB_BANK0_START_ADDR + 2048*3, DHUB_BANK0_START_ADDR + 2048*3+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// BANK1
	{ avioDhubChMap_vpp_PIP_R, DHUB_BANK1_START_ADDR, DHUB_BANK1_START_ADDR+32, 32, (2048*2-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
 	{ avioDhubChMap_vpp_PIP_FRC_R,DHUB_BANK1_START_ADDR +2048*2, DHUB_BANK1_START_ADDR + 2048*2+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_PIP_FRC_W,DHUB_BANK1_START_ADDR + 2048*3, DHUB_BANK1_START_ADDR + 2048*3+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// BANK2
	{ avioDhubChMap_vpp_DINT0_R,DHUB_BANK2_START_ADDR, DHUB_BANK2_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// BANK3
	{ avioDhubChMap_vpp_DINT1_R,DHUB_BANK3_START_ADDR, DHUB_BANK3_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// BANK4
	{ avioDhubChMap_vpp_DINT_W,DHUB_BANK4_START_ADDR, DHUB_BANK4_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// Bank5
#if (BERLIN_CHIP_VERSION >= BERLIN_BG2)
	{ avioDhubChMap_vpp_BCM_R, DHUB_BANK5_START_ADDR, DHUB_BANK5_START_ADDR+512, 512, (1024-512), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_HDMI_R, DHUB_BANK5_START_ADDR+1024, DHUB_BANK5_START_ADDR+1024+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#else
	{ avioDhubChMap_vpp_BCM_R, DHUB_BANK5_START_ADDR, DHUB_BANK5_START_ADDR+128, 128, (512-128), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_HDMI_R, DHUB_BANK5_START_ADDR+512, DHUB_BANK5_START_ADDR+512+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#endif
	{ avioDhubChMap_vpp_AUX_FRC_R,DHUB_BANK5_START_ADDR+1024+512, DHUB_BANK5_START_ADDR+1024+512+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_AUX_FRC_W,DHUB_BANK5_START_ADDR+2048+512, DHUB_BANK5_START_ADDR+2048+512+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_BG_R,DHUB_BANK5_START_ADDR+2048+512*3, DHUB_BANK5_START_ADDR+2048+512*3+32, 32, (2048*2-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_TT_R,DHUB_BANK5_START_ADDR+2048*3+512*3, DHUB_BANK5_START_ADDR+2048*3+512*3+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#else /* (BERLIN_CHIP_VERSION == BERLIN_BG2_CD) */
       // BANK0
	{ avioDhubChMap_vpp_MV_R, VPP_DHUB_BANK0_START_ADDR, VPP_DHUB_BANK0_START_ADDR+32, 32, (2048*2-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_MV_FRC_R, VPP_DHUB_BANK0_START_ADDR + 2048*2, VPP_DHUB_BANK0_START_ADDR + 2048*2+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_MV_FRC_W, VPP_DHUB_BANK0_START_ADDR + 2048*3, VPP_DHUB_BANK0_START_ADDR + 2048*3+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// BANK1
	{ avioDhubChMap_vpp_DINT0_R,VPP_DHUB_BANK1_START_ADDR, VPP_DHUB_BANK1_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// BANK2
	{ avioDhubChMap_vpp_DINT1_R,VPP_DHUB_BANK2_START_ADDR, VPP_DHUB_BANK2_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// BANK3
	{ avioDhubChMap_vpp_DINT_W,VPP_DHUB_BANK3_START_ADDR, VPP_DHUB_BANK3_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// Bank4
	{ avioDhubChMap_vpp_BCM_R, VPP_DHUB_BANK4_START_ADDR, VPP_DHUB_BANK4_START_ADDR+128, 128, (1024-128), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_HDMI_R, VPP_DHUB_BANK4_START_ADDR+1024, VPP_DHUB_BANK4_START_ADDR+1024+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#if (BERLIN_CHIP_VERSION == BERLIN_BG2CDP)
	{ avioDhubChMap_vpp_AUX_FRC_R,DHUB_BANK5_START_ADDR+1024*2, DHUB_BANK5_START_ADDR+1024*2+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_AUX_FRC_W,DHUB_BANK5_START_ADDR+1024*3, DHUB_BANK5_START_ADDR+1024*3+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_TT_R,DHUB_BANK5_START_ADDR+1024*4, DHUB_BANK5_START_ADDR+1024*4+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1}
#else /* (BERLIN_CHIP_VERSION == BERLIN_BG2CDP) */
	{ avioDhubChMap_vpp_SPDIF_W,VPP_DHUB_BANK4_START_ADDR+1024*2, VPP_DHUB_BANK4_START_ADDR+1024*2+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1}
#endif
#endif /* (BERLIN_CHIP_VERSION != BERLIN_BG2_CD) */
#else
	{ avioDhubChMap_vpp_MV_R, 0, 0+32, 32, (2048*2-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_vpp_MV_PBO_R, 2048*2, 2048*2+0, 0, 0, dHubChannel_CFG_MTU_128byte, 0, 0, 1},
   	{ avioDhubChMap_vpp_MV_FRC_R, 1024*4, 1024*4+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_MV_FRC_W, 2048*3, 2048*3+32, 32, (2048-32), dHubChannel_CFG_MTU_32byte, 0, 0, 1},
	{ avioDhubChMap_vpp_PIP_R, 2048*4, 2048*4+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_PIP_PBO_R,2048*5, 2048*5+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
 	{ avioDhubChMap_vpp_PIP_FRC_R,2048*6, 2048*6+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_PIP_FRC_W,2048*7, 2048*7+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_DINT0_R,2048*8, 2048*8+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_DINT1_R,2048*9, 2048*9+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_DINT_W,2048*10, 2048*10+32, 32, (2048*2-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_AUX_FRC_R,2048*12, 2048*12+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_AUX_FRC_W,2048*13, 2048*14+32, 32, (2048-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_vpp_BG_R,2048*14, 2048*14+32, 32, (2048*2-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#endif
};
DHUB_channel_config  AG_config[AG_NUM_OF_CHANNELS] = {
#if (BERLIN_CHIP_VERSION >= BERLIN_B_0)
#if (BERLIN_CHIP_VERSION != BERLIN_BG2_CD) && (BERLIN_CHIP_VERSION != BERLIN_BG2CDP)
	// Bank0
	{ avioDhubChMap_ag_APPCMD_R, DHUB_BANK0_START_ADDR, DHUB_BANK0_START_ADDR+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MA0_R, DHUB_BANK0_START_ADDR+512, DHUB_BANK0_START_ADDR+512+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MA1_R, DHUB_BANK0_START_ADDR+512+1024,DHUB_BANK0_START_ADDR+512+1024+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1}, 
	{ avioDhubChMap_ag_MA2_R, DHUB_BANK0_START_ADDR+512+1024*2,DHUB_BANK0_START_ADDR+512+1024*2+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MA3_R, DHUB_BANK0_START_ADDR+512+1024*3,DHUB_BANK0_START_ADDR+512+1024*3+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_SA_R, DHUB_BANK0_START_ADDR+512+1024*4,DHUB_BANK0_START_ADDR+512+1024*4+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_SPDIF_R, DHUB_BANK0_START_ADDR+512+1024*5, DHUB_BANK0_START_ADDR+512+1024*5+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MIC_W, DHUB_BANK0_START_ADDR+1024*6, DHUB_BANK0_START_ADDR+1024*6+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_APPDAT_R, DHUB_BANK0_START_ADDR+512+1024*6, DHUB_BANK0_START_ADDR+512+1024*6+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_APPDAT_W, DHUB_BANK0_START_ADDR+1024*7, DHUB_BANK0_START_ADDR+1024*7+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// Bank1
	{ avioDhubChMap_ag_MOSD_R, DHUB_BANK1_START_ADDR, DHUB_BANK1_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// Bank2
	{ avioDhubChMap_ag_CSR_R, DHUB_BANK2_START_ADDR, DHUB_BANK2_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// Bank3
	{ avioDhubChMap_ag_GFX_R, DHUB_BANK3_START_ADDR, DHUB_BANK3_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// Bank4
	{ avioDhubChMap_ag_PG_R, DHUB_BANK4_START_ADDR, DHUB_BANK4_START_ADDR+32, 32, (2048*3-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{ avioDhubChMap_ag_PG_ENG_R, DHUB_BANK4_START_ADDR + (2048 * 3), DHUB_BANK4_START_ADDR + (2048 *3) + 32, 32, (1024 - 32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_PG_ENG_W, DHUB_BANK4_START_ADDR + (2048 * 3) + 1024, DHUB_BANK4_START_ADDR + (2048 * 3) + 1024 + 32, 32, (1024 - 32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#else /* (BERLIN_CHIP_VERSION == BERLIN_BG2_CD) */
	// Bank0^M
	{ avioDhubChMap_ag_APPCMD_R, AG_DHUB_BANK0_START_ADDR, AG_DHUB_BANK0_START_ADDR+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MA0_R, AG_DHUB_BANK0_START_ADDR+512, AG_DHUB_BANK0_START_ADDR+512+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MA1_R, AG_DHUB_BANK0_START_ADDR+512+1024,AG_DHUB_BANK0_START_ADDR+512+1024+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MA2_R, AG_DHUB_BANK0_START_ADDR+512+1024*2,AG_DHUB_BANK0_START_ADDR+512+1024*2+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{ avioDhubChMap_ag_MA3_R, AG_DHUB_BANK0_START_ADDR+512+1024*3,AG_DHUB_BANK0_START_ADDR+512+1024*3+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1
},
#if (BERLIN_CHIP_VERSION == BERLIN_BG2CDP)
	{ avioDhubChMap_ag_SA_R, AG_DHUB_BANK0_START_ADDR+512+1024*4,AG_DHUB_BANK0_START_ADDR+512+1024*4+32, 32, (1024-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#endif
	{ avioDhubChMap_ag_SPDIF_R, AG_DHUB_BANK0_START_ADDR+512+1024*5, AG_DHUB_BANK0_START_ADDR+512+1024*5+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0,
1},
	{ avioDhubChMap_ag_APPDAT_R, AG_DHUB_BANK0_START_ADDR+512+1024*6, AG_DHUB_BANK0_START_ADDR+512+1024*6+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0
, 1},
	{ avioDhubChMap_ag_APPDAT_W, AG_DHUB_BANK0_START_ADDR+1024*7, AG_DHUB_BANK0_START_ADDR+1024*7+32, 32, (512-32), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	// Bank1
	{ avioDhubChMap_ag_CSR_R, AG_DHUB_BANK1_START_ADDR, AG_DHUB_BANK1_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	// Bank2
	{ avioDhubChMap_ag_GFX_R, AG_DHUB_BANK2_START_ADDR, AG_DHUB_BANK2_START_ADDR+32, 32, (8192-32), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
#endif /* (BERLIN_CHIP_VERSION != BERLIN_BG2_CD) */
#else
	{	avioDhubChMap_ag_BCM_R, 0, 0+64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{	avioDhubChMap_ag_MA0_R, 512, 512 + 64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{	avioDhubChMap_ag_MA1_R, 512*2,512*2 + 64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1}, 
	{	avioDhubChMap_ag_MA2_R, 512*3,512*3 + 64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{	avioDhubChMap_ag_MA3_R, 512*4,512*4 + 64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{	avioDhubChMap_ag_SA_R, 512*5,512*5 + 64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{	avioDhubChMap_ag_SPDIF_R, 512*6, 512*6 + 64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{	avioDhubChMap_ag_MIC_W, 512*7, 512*7 + 64, 64, (512-64), dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	/*
	{	avioDhubChMap_ag_MOSD_R, 512*8, (512*8+64), 64, (256-64), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{	avioDhubChMap_ag_CSR_R, (4096+256 ), (4096+256+64), 64, (4096-256-64), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	*/
	{	avioDhubChMap_ag_MOSD_R, 512*8, (512*8+64), 64, (4096-256-64), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{	avioDhubChMap_ag_CSR_R, (512*8+4096-256), (512*8+4096-256+64), 64, (256-64), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{	avioDhubChMap_ag_GFX_R, (4096 + 4096), (4096+4096 + 64), 64, (2048*4 -64), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{	avioDhubChMap_ag_GFX_PBO_R, (4096 + 4096 + 2048*4), (4096+4096 + 2048*4 ), 0, 0, dHubChannel_CFG_MTU_128byte, 0, 0, 0},
	{	avioDhubChMap_ag_PG_R, (4096 +4096 + 2048*4), (4096+4096 +2048*4 + 64), 64, (2048*4-64), dHubChannel_CFG_MTU_128byte, 1, 0, 1},
	{	avioDhubChMap_ag_PG_ENG_R, (4096 + 4096 + 8192 ), (4096+4096 +8192 ), 0, 0, dHubChannel_CFG_MTU_128byte, 0, 0, 1},
	{	avioDhubChMap_ag_PG_ENG_W, (4096 + 4096 + 8192 ), (4096+4096 +8192 ), 0, 0, dHubChannel_CFG_MTU_128byte, 0, 0, 1},
#endif
};
/******************************************************************************************************************
 *	Function: DhubInitialization 
 *	Description: Initialize DHUB .
 *	Parameter : cpuId ------------- cpu ID
 *             dHubBaseAddr -------------  dHub Base address.
 *             hboSramAddr ----- Sram Address for HBO.
 *             pdhubHandle ----- pointer to 2D dhubHandle 
 *             dhub_config ----- configuration of AG 
 *             numOfChans	 ----- number of channels
 *	Return:		void
******************************************************************************************************************/
void DhubInitialization(SIGN32 cpuId, UNSG32 dHubBaseAddr, UNSG32 hboSramAddr, HDL_dhub2d *pdhubHandle, DHUB_channel_config *dhub_config,SIGN32 numOfChans)
{
	HDL_semaphore *pSemHandle;
	SIGN32 i;
	SIGN32 chanId;
	(void)cpuId;

	//Initialize HDL_dhub with a $dHub BIU instance.
	dhub2d_hdl(	hboSramAddr,			/*!	Base address of dHub.HBO SRAM !*/
			 	dHubBaseAddr,			/*!	Base address of a BIU instance of $dHub !*/
			 	pdhubHandle				/*!	Handle to HDL_dhub2d !*/
			);
	//set up semaphore to trigger cmd done interrupt
	//note that this set of semaphores are different from the HBO semaphores
	//the ID must match the dhub ID because they are hardwired.
	pSemHandle = dhub_semaphore(&pdhubHandle->dhub);

	for (i = 0; i< numOfChans; i++) {
		//Configurate a dHub channel
		//note that in this function, it also configured right HBO channels(cmdQ and dataQ) and semaphores
		chanId = dhub_config[i].chanId;
		{
			dhub_channel_cfg(
						&pdhubHandle->dhub,					/*!	Handle to HDL_dhub !*/
						chanId,						/*!	Channel ID in $dHubReg !*/
						dhub_config[chanId].chanCmdBase,		//UNSG32 baseCmd,	/*!	Channel FIFO base address (byte address) for cmdQ !*/
						dhub_config[chanId].chanDataBase,		//UNSG32 baseData,	/*!	Channel FIFO base address (byte address) for dataQ !*/
						dhub_config[chanId].chanCmdSize/8,	//SIGN32		depthCmd,			/*!	Channel FIFO depth for cmdQ, in 64b word !*/
						dhub_config[chanId].chanDataSize/8,	//SIGN32		depthData,			/*!	Channel FIFO depth for dataQ, in 64b word !*/
						dhub_config[chanId].chanMtuSize,						/*!	See 'dHubChannel.CFG.MTU', 0/1/2 for 8/32/128 bytes !*/
						dhub_config[chanId].chanQos,								/*!	See 'dHubChannel.CFG.QoS' !*/
						dhub_config[chanId].chanSelfLoop,								/*!	See 'dHubChannel.CFG.selfLoop' !*/
						dhub_config[chanId].chanEnable,								/*!	0 to disable, 1 to enable !*/
						0								/*!	Pass NULL to directly init dHub, or
															Pass non-zero to receive programming sequence
															in (adr,data) pairs
															!*/
						);
			// setup interrupt for channel chanId
			//configure the semaphore depth to be 1
			semaphore_cfg(pSemHandle, chanId, 1, 0);
#if 0
  			// enable interrupt from this semaphore
		  	semaphore_intr_enable (
    			pSemHandle, // semaphore handler
		    	chanId,
    			0,       // empty
		    	1,       // full
    			0,       // almost_empty
		    	0,       // almost_full
    			cpuId        // 0~2, depending on which CPU the interrupt is enabled for.
		  	);
#endif
		}
	}
}

/******************************************************************************************************************
 *	Function: DhubChannelClear
 *	Description: Clear corresponding DHUB channel.
 *	Parameter:	hdl  ---------- handle to HDL_dhub
 *			id   ---------- channel ID in dHubReg
 *			cfgQ ---------- pass null to directly init dhub, or pass non-zero to receive programming
 *					sequence in (adr, data) pairs
 *	Return:		void
******************************************************************************************************************/
void DhubChannelClear(void *hdl, SIGN32 id, T64b cfgQ[])
{
	UNSG32	cmdID = dhub_id2hbo_cmdQ(id);
	UNSG32	dataID = dhub_id2hbo_data(id);
	HDL_dhub *dhub = (HDL_dhub *)hdl;
	HDL_hbo *hbo = &(dhub->hbo);

	/* 1.Software stops the command queue in HBO (please refer to HBO.sxw for details) */
	hbo_queue_enable(hbo, cmdID, 0, cfgQ);
	/* 2.Software stops the channel in dHub by writing zero to  dHubChannel.START.EN */
	dhub_channel_enable(dhub, id, 0, cfgQ);
	/* 3.Software clears the channel in dHub by writing one to  dHubChannel.CLEAR.EN */
	dhub_channel_clear(dhub, id);
	/* 4.Software waits for the register bits dHubChannel.PENDING.ST and dHubChannel.BUSY.ST to be 0 */
	dhub_channel_clear_done(dhub, id);
	/* 5.Software stops and clears the command queue */
	hbo_queue_enable(hbo, cmdID, 0, cfgQ);
	hbo_queue_clear(hbo, cmdID);
	/* 6.Software wait for the corresponding busy bit to be 0 */
	hbo_queue_clear_done(hbo, cmdID);
	/* 7.Software stops and clears the data queue */
	hbo_queue_enable(hbo, dataID, 0, cfgQ);
	hbo_queue_clear(hbo, dataID);
	/* 8.Software wait for the corresponding data Q busy bit to be 0 */
	hbo_queue_clear_done(hbo, dataID);
	/* 9.Software enable dHub and HBO */
	dhub_channel_enable(dhub, id, 1, cfgQ);
	hbo_queue_enable(hbo, cmdID, 1, cfgQ);
	hbo_queue_enable(hbo, dataID, 1, cfgQ);
}
