static int __logic_dispatch_push(ccif_msg_t *msg, void *ctl_b)
{
	logic_channel_info_t *ch_info;
	int ret = 0;
	logic_dispatch_ctl_block_t *ctl_block = (logic_dispatch_ctl_block_t*)ctl_b;
	int md_id = ctl_block->m_md_id;
	int drop = 1;

	if (unlikely(msg->channel >= CCCI_MAX_CH_NUM)){
		CCCI_MSG_INF(md_id, "cci", "%s get invalid logic ch id:%d\n", \
							__FUNCTION__, msg->channel);
		ret = -CCCI_ERR_INVALID_LOGIC_CHANNEL_ID;
		goto _out;
	}

	ch_info = &(ctl_block->m_logic_ch_table[msg->channel]);
	if (unlikely(ch_info->m_attrs&L_CH_ATTR_TX)){
		CCCI_MSG_INF(md_id, "cci", "%s CH:%d %s is tx channel\n", __FUNCTION__, \
							msg->channel, ch_info->m_ch_name);
		ret = -CCCI_ERR_PUSH_RX_DATA_TO_TX_CHANNEL;
		goto _out;
	}

	// check whether fifo is ready
	if (!ch_info->m_kfifo_ready){
		CCCI_MSG_INF(md_id, "cci", "%s CH:%d %s's kfifo is not ready\n", \
							__FUNCTION__, msg->channel, ch_info->m_ch_name);
		ret = -CCCI_ERR_KFIFO_IS_NOT_READY;
		goto _out;
	}

	// Check fifo free space
	if (kfifo_is_full(&ch_info->m_kfifo))
	{
		if (ch_info->m_attrs&L_CH_DROP_TOLERATED){
			CCCI_CTL_MSG(md_id, "Drop (%08X %08X %02d %08X) is tolerated\n", \
							msg->data[0], msg->data[1], msg->channel, msg->reserved);
			ret = sizeof(ccif_msg_t);
		} else {
			// message should NOT be droped
			CCCI_DBG_MSG(md_id, "cci", "kfifo full: ch:%s size:%d (%08X %08X %02d %08X)\n",
							ch_info->m_ch_name, kfifo_size(&ch_info->m_kfifo),msg->data[0], 
							msg->data[1], msg->channel, msg->reserved);
			// disalbe CCIF interrupt here????
			ret = 0; // Fix this!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		}
		goto _out;
	}

	// Push data
	ret = kfifo_in(&ch_info->m_kfifo,msg,sizeof(ccif_msg_t));
	WARN_ON(ret!=sizeof(ccif_msg_t));
	ctl_block->m_has_pending_data = 1;
	drop = 0;
_out:
	add_logic_layer_record(md_id, (ccci_msg_t*)msg, drop);
	return ret;
}
Пример #2
0
int ccci_alloc_smem(int md_id)
{
	ccci_mem_layout_t	*mem_layout_ptr = NULL;
	int					ret = 0;
	int					smem_size = 0;
	int					*smem_vir;
	dma_addr_t			smem_phy;
	int					i,j, base_virt, base_phy;
	int					size;

	smem_size = cal_md_smem_size(md_id);
	ret = cfg_md_mem_layout(md_id);
	if(ret < 0) {
		CCCI_MSG_INF(md_id, "ctl", "md mem layout config fail\n");
		return ret;
	}
	mem_layout_ptr = &md_mem_layout_tab[md_id];

#ifdef CCCI_STATIC_SHARED_MEM
	if (CCCI_SHARED_MEM_SIZE < smem_size) {
	    CCCI_MSG_INF(md_id, "ctl", "[error]CCCI shared mem isn't enough: 0x%08X\n", smem_size);
	    return -ENOMEM;
	}
	smem_phy = mem_layout_ptr->smem_region_phy;
	smem_vir = (int*)ioremap_nocache((unsigned long)smem_phy, smem_size);
	if (!smem_vir) {
		CCCI_MSG_INF(md_id, "ctl", "ccci smem ioremap fail\n");
		return -ENOMEM;
	}

#else // dynamic allocation shared memory

	smem_vir = dma_alloc_coherent(NULL, smem_size, &smem_phy, GFP_KERNEL);
	if (smem_vir == NULL) {
		CCCI_MSG_INF(md_id, "ctl", "ccci smem dma_alloc_coherent fail\n");
		return -CCCI_ERR_GET_MEM_FAIL;
	}
	mem_layout_ptr->smem_region_phy = (unsigned int)smem_phy;
	mem_layout_ptr->smem_region_size = smem_size;

#endif

	mem_layout_ptr->smem_region_vir = (unsigned int)smem_vir;
	CCCI_CTL_MSG(md_id, "ccci_smem_phy=%x, ccci_smem_size=%d, ccci_smem_virt=%x\n", 
			(unsigned int)smem_phy, smem_size, (unsigned int)smem_vir);

	WARN_ON(smem_phy&(0x4000-1)||smem_size&(0x4000-1));

	// Memory allocate done, config for each sub module
	base_virt = (int)smem_vir;
	base_phy = (int)smem_phy;

	// Total
	md_smem_tab[md_id].ccci_smem_vir = base_virt;
	md_smem_tab[md_id].ccci_smem_phy = base_phy;
	md_smem_tab[md_id].ccci_smem_size = smem_size;

	//MD runtime data!! Note: This item must be the first!!!
	md_smem_tab[md_id].ccci_md_runtime_data_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_md_runtime_data_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_md_runtime_data_smem_size = CCCI_MD_RUNTIME_DATA_SMEM_SIZE;
	base_virt += CCCI_MD_RUNTIME_DATA_SMEM_SIZE;
	base_phy += CCCI_MD_RUNTIME_DATA_SMEM_SIZE;

	// EXP
	md_smem_tab[md_id].ccci_exp_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_exp_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_exp_smem_size = MD_EX_LOG_SIZE;
	base_virt += MD_EX_LOG_SIZE;
	base_phy += MD_EX_LOG_SIZE;

	//MD Exception expand Info
	md_smem_tab[md_id].ccci_md_ex_exp_info_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_md_ex_exp_info_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_md_ex_exp_info_smem_size = CCCI_MD_EX_EXP_INFO_SMEM_SIZE;
	base_virt += CCCI_MD_EX_EXP_INFO_SMEM_SIZE;
	base_phy += CCCI_MD_EX_EXP_INFO_SMEM_SIZE;

	//Misc info
	md_smem_tab[md_id].ccci_misc_info_base_virt = base_virt;
	md_smem_tab[md_id].ccci_misc_info_base_phy = base_phy;
	md_smem_tab[md_id].ccci_misc_info_size = CCCI_MISC_INFO_SMEM_SIZE;
	base_virt += CCCI_MISC_INFO_SMEM_SIZE;
	base_phy += CCCI_MISC_INFO_SMEM_SIZE;

	base_virt = round_up(base_virt, 0x1000);
	base_phy = round_up(base_phy, 0x1000);

	// PCM
	md_smem_tab[md_id].ccci_pcm_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_pcm_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_pcm_smem_size = pcm_smem_size[md_id];
	size = round_up(pcm_smem_size[md_id], 0x1000);
	base_virt += size;
	base_phy += size;

	// LOG
	md_smem_tab[md_id].ccci_mdlog_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_mdlog_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_mdlog_smem_size = md_log_smem_size[md_id];
	size = round_up(md_log_smem_size[md_id], 0x1000);
	base_virt += size;
	base_phy += size;

	// RPC
	md_smem_tab[md_id].ccci_rpc_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_rpc_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_rpc_smem_size = rpc_smem_size[md_id];
	size = round_up(rpc_smem_size[md_id], 0x1000);
	base_virt += size;
	base_phy += size;

	// FS
	md_smem_tab[md_id].ccci_fs_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_fs_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_fs_smem_size = CCCI_FS_SMEM_SIZE;
	size = round_up(CCCI_FS_SMEM_SIZE, 0x1000);
	base_virt += size;
	base_phy += size;

	// TTY: tty_muxd(uart0), tty_meta(uart1), ccmni1(uart2), ccmni2(uart3), ccmni3(uart4), tty_ipc(uart5)
	j = 0;
	for (i = 0; i < CCCI1_TTY_PORT_NUM-1; i++, j++) {
		md_smem_tab[md_id].ccci_tty_smem_base_virt[i] = base_virt;
		md_smem_tab[md_id].ccci_tty_smem_base_phy[i] = base_phy;
		md_smem_tab[md_id].ccci_tty_smem_size[i] = tty_smem_size[md_id];
		base_virt += tty_smem_size[md_id];
		base_phy += tty_smem_size[md_id];
	}
	for (i = 0; i < CCCI1_CCMNI_V1_PORT_NUM; i++, j++) {
		if(net_v1_smem_size[md_id] == 0) {
			md_smem_tab[md_id].ccci_tty_smem_base_virt[j] = 0;
			md_smem_tab[md_id].ccci_tty_smem_base_phy[j] = 0;
			md_smem_tab[md_id].ccci_tty_smem_size[j] = 0;
		} else {
			md_smem_tab[md_id].ccci_tty_smem_base_virt[j] = base_virt;
			md_smem_tab[md_id].ccci_tty_smem_base_phy[j] = base_phy;
			md_smem_tab[md_id].ccci_tty_smem_size[j] = net_v1_smem_size[md_id];
			base_virt += net_v1_smem_size[md_id];
			base_phy += net_v1_smem_size[md_id];
		}
	}
	md_smem_tab[md_id].ccci_tty_smem_base_virt[j] = base_virt; // TTY for IPC
	md_smem_tab[md_id].ccci_tty_smem_base_phy[j] = base_phy;
	md_smem_tab[md_id].ccci_tty_smem_size[j] = tty_smem_size[md_id];
	base_virt += tty_smem_size[md_id];
	base_phy += tty_smem_size[md_id];
	j++;
	for (; j < UART_MAX_PORT_NUM; j++) {
		md_smem_tab[md_id].ccci_tty_smem_base_virt[j] = 0;
		md_smem_tab[md_id].ccci_tty_smem_base_phy[j] = 0;
		md_smem_tab[md_id].ccci_tty_smem_size[j] = 0;
	}

	// PMIC
	md_smem_tab[md_id].ccci_pmic_smem_base_virt = 0;
	md_smem_tab[md_id].ccci_pmic_smem_base_phy = 0;
	md_smem_tab[md_id].ccci_pmic_smem_size = 0;
	base_virt += 0;
	base_phy += 0;

	// SYS
	md_smem_tab[md_id].ccci_sys_smem_base_virt = 0;
	md_smem_tab[md_id].ccci_sys_smem_base_phy = 0;
	md_smem_tab[md_id].ccci_sys_smem_size = 0;
	base_virt += 0;
	base_phy += 0;
	
	//IPC
	md_smem_tab[md_id].ccci_ipc_smem_base_virt = base_virt;
	md_smem_tab[md_id].ccci_ipc_smem_base_phy = base_phy;
	md_smem_tab[md_id].ccci_ipc_smem_size = CCCI_IPC_SMEM_SIZE;
	base_virt += CCCI_IPC_SMEM_SIZE ;
	base_phy +=  CCCI_IPC_SMEM_SIZE;

	// CCMNI_V2 -- UP-Link
	if(net_smem_ul_size[md_id] != 0) {
		md_smem_tab[md_id].ccci_ccmni_smem_ul_base_virt = base_virt;
		md_smem_tab[md_id].ccci_ccmni_smem_ul_base_phy = base_phy;
		md_smem_tab[md_id].ccci_ccmni_smem_ul_size = net_smem_ul_size[md_id];
		base_virt += net_smem_ul_size[md_id];
		base_phy += net_smem_ul_size[md_id];
	} else {
		md_smem_tab[md_id].ccci_ccmni_smem_ul_base_virt = 0;
		md_smem_tab[md_id].ccci_ccmni_smem_ul_base_phy = 0;
		md_smem_tab[md_id].ccci_ccmni_smem_ul_size = 0;
	}

	// CCMNI_V2 --DOWN-Link
	if(net_smem_dl_size[md_id] != 0) {
		md_smem_tab[md_id].ccci_ccmni_smem_dl_base_virt = base_virt;
		md_smem_tab[md_id].ccci_ccmni_smem_dl_base_phy = base_phy;
		md_smem_tab[md_id].ccci_ccmni_smem_dl_size = net_smem_dl_size[md_id];
		base_virt += net_smem_dl_size[md_id];
		base_phy += net_smem_dl_size[md_id];
	} else {
		md_smem_tab[md_id].ccci_ccmni_smem_dl_base_virt = 0;
		md_smem_tab[md_id].ccci_ccmni_smem_dl_base_phy = 0;
		md_smem_tab[md_id].ccci_ccmni_smem_dl_size = 0;
	}

	// CCMNI_V2 --Ctrl memory
	for (i = 0; i < CCMNI_CHANNEL_CNT; i++) {
		if (net_v2_smem_size[md_id] == 0) {
			md_smem_tab[md_id].ccci_ccmni_ctl_smem_base_virt[i] = 0;
			md_smem_tab[md_id].ccci_ccmni_ctl_smem_base_phy[i] = 0;
			md_smem_tab[md_id].ccci_ccmni_ctl_smem_size[i] = 0;
		} else {
			md_smem_tab[md_id].ccci_ccmni_ctl_smem_base_virt[i] = base_virt;
			md_smem_tab[md_id].ccci_ccmni_ctl_smem_base_phy[i] = base_phy;
			md_smem_tab[md_id].ccci_ccmni_ctl_smem_size[i] = net_v2_smem_size[md_id];
		}
		memset((void*)base_virt, 0, net_v2_smem_size[md_id]);
		base_virt += net_v2_smem_size[md_id];
		base_phy += net_v2_smem_size[md_id];
	}

	for (; i < CCMNI_MAX_CHANNELS; i++){
		md_smem_tab[md_id].ccci_ccmni_ctl_smem_base_virt[i] = 0;
		md_smem_tab[md_id].ccci_ccmni_ctl_smem_base_phy[i] = 0;
		md_smem_tab[md_id].ccci_ccmni_ctl_smem_size[i] = 0;
	}

	return ret;
}
Пример #3
0
static void dump_ccci_md_data(void)
{
	int i;
	struct modem_runtime_t *runtime = (struct modem_runtime_t *)MD_RUNTIME_ADDR;
	char ctmp[12];
	int *p;

	p = (int*)ctmp;
	*p = runtime->Prefix;
	p++;
	*p = runtime->Platform_L;
	p++;
	*p = runtime->Platform_H;

	CCCI_MSG("**********************************************\n");
	CCCI_MSG("Prefix\t\t%c%c%c%c\n", ctmp[0], ctmp[1], ctmp[2], ctmp[3]);
	CCCI_MSG("Platform_L\t\t%c%c%c%c\n", ctmp[4], ctmp[5], ctmp[6], ctmp[7]);
	CCCI_MSG("Platform_H\t\t%c%c%c%c\n", ctmp[8], ctmp[9], ctmp[10], ctmp[11]);

	CCCI_MSG("DriverVersion\t\t0x%x\n", runtime->DriverVersion);
	CCCI_MSG("BootChannel\t\t%d\n", runtime->BootChannel);
	CCCI_MSG("BootingStartID(Mode)\t\t%d\n", runtime->BootingStartID);
	CCCI_MSG("BootAttributes\t\t%d\n", runtime->BootAttributes);
	CCCI_MSG("BootReadyID\t\t%d\n", runtime->BootReadyID);
        CCCI_CTL_MSG("MdlogShareMemBase\t\t0x%x\n", runtime->MdlogShareMemBase);
	CCCI_CTL_MSG("MdlogShareMemSize\t\t%d\n", runtime->MdlogShareMemSize);
	CCCI_CTL_MSG("PcmShareMemBase\t\t0x%x\n", runtime->PcmShareMemBase);
	CCCI_CTL_MSG("PcmShareMemSize\t\t%d\n", runtime->PcmShareMemSize);

	CCCI_CTL_MSG("UartPortNum\t\t%d\n", runtime->UartPortNum);
	for (i = 0; i < UART_MAX_PORT_NUM; i++) {
		CCCI_CTL_MSG("UartShareMemBase[%d]\t0x%x\n", i, runtime->UartShareMemBase[i]);
		CCCI_CTL_MSG("UartShareMemSize[%d]\t%d\n", i, runtime->UartShareMemSize[i]);
	}

	CCCI_CTL_MSG("FileShareMemBase\t0x%x\n", runtime->FileShareMemBase);
	CCCI_CTL_MSG("FileShareMemSize\t%d\n", runtime->FileShareMemSize);
	CCCI_CTL_MSG("RpcShareMemBase\t0x%x\n", runtime->RpcShareMemBase);
	CCCI_CTL_MSG("RpcShareMemSize\t%d\n", runtime->RpcShareMemSize);
	CCCI_CTL_MSG("PmicShareMemBase\t0x%x\n", runtime->PmicShareMemBase);
	CCCI_CTL_MSG("PmicShareMemSize\t%d\n", runtime->PmicShareMemSize);
	CCCI_CTL_MSG("ExceShareMemBase\t0x%x\n", runtime->ExceShareMemBase);
	CCCI_CTL_MSG("ExceShareMemSize\t%d\n", runtime->ExceShareMemSize);
	CCCI_CTL_MSG("SysShareMemBase\t\t0x%x\n", runtime->SysShareMemBase);
	CCCI_CTL_MSG("SysShareMemSize\t\t%d\n", runtime->SysShareMemSize);
	CCCI_CTL_MSG("IPCShareMemBase\t\t0x%x\n",runtime->IPCShareMemBase);
	CCCI_CTL_MSG("IPCShareMemSize\t\t0x%x\n",runtime->IPCShareMemSize);
	CCCI_CTL_MSG("CheckSum\t\t%d\n", runtime->CheckSum);

	p = (int*)ctmp;
	*p = runtime->Postfix;
	CCCI_MSG("Postfix\t\t%c%c%c%c\n", ctmp[0], ctmp[1], ctmp[2], ctmp[3]);

	CCCI_MSG("----------------------------------------------\n");

	CCCI_MSG("ccci_smem_virt\t%x\n", (unsigned int)ccci_smem_virt);
	CCCI_MSG("ccci_smem_phy\t%x\n", (unsigned int)ccci_smem_phy);
	CCCI_MSG("ccci_smem_size\t%08x\n", ccci_smem_size);

	CCCI_MSG("ccci_pcm_smem_base_virt\t%x\n", ccci_pcm_smem_base_virt);
	CCCI_MSG("ccci_pcm_smem_base_phy\t%x\n", ccci_pcm_smem_base_phy);
	CCCI_MSG("ccci_pcm_smem_size\t%d\n", ccci_pcm_smem_size);

	CCCI_MSG("ccci_fs_smem_base_virt\t%x\n", ccci_fs_smem_base_virt);
	CCCI_MSG("ccci_fs_smem_base_phy\t%x\n", ccci_fs_smem_base_phy);
	CCCI_MSG("ccci_fs_smem_size\t%d\n", ccci_fs_smem_size);

	for (i = 0; i < UART_MAX_PORT_NUM; i++) {
		CCCI_MSG("ccci_tty_smem_base_virt[%d]\t%x\n", i, ccci_tty_smem_base_virt[i]);
		CCCI_MSG("ccci_tty_smem_base_phy[%d]\t%x\n", i, ccci_tty_smem_base_phy[i]);
		CCCI_MSG("ccci_tty_smem_size[%d]\t%d\n", i, ccci_tty_smem_size[i]);
	}

	CCCI_MSG("ccci_ipc_smem_base_virt\t%x\n", ccci_ipc_smem_base_virt);
	CCCI_MSG("ccci_ipc_smem_base_phy\t%x\n", ccci_ipc_smem_base_phy);
	CCCI_MSG("ccci_ipc_smem_size\t%d\n", ccci_ipc_smem_size);
	CCCI_MSG("**********************************************\n");
}
Пример #4
0
static int __init ccci_alloc_smem(void)
{
	int ret = 0;
	int i, base_virt, base_phy;

	ccci_smem_size = CCCI_PCM_SMEM_SIZE +
		    CCCI_MD_LOG_SIZE +
		    CCCI_PMIC_SMEM_SIZE +
		    CCCI_RPC_SMEM_SIZE +
		    CCCI_FS_SMEM_SIZE +
		    (CCCI_TTY_SMEM_SIZE * CCCI_TTY_PORT_COUNT) +
#ifdef AP_MD_EINT_SHARE_DATA
		    CCCI_SYS_SMEM_SIZE +
#endif
		    MD_EX_LOG_SIZE+
		    CCCI_IPC_SMEM_SIZE;
	ccci_smem_size=round_up(ccci_smem_size,0x4000);
	
#ifdef CCCI_STATIC_SHARED_MEM

	if (CCCI_SHARED_MEM_SIZE < ccci_smem_size) {
	    CCCI_MSG_INF("ctl", "CCCI shared mem is too small\n");
	    return -ENOMEM;
	}

	ccci_smem_virt = ioremap_nocache(CCCI_SHARED_MEM_BASE, CCCI_SHARED_MEM_SIZE);
	if (!ccci_smem_virt) {
		CCCI_MSG_INF("ctl", "CCCI_MD: alloc_smem err\n");
		return -ENOMEM;
	}
	ccci_smem_phy = CCCI_SHARED_MEM_BASE;
#else // dynamic allocation shared memory

	ccci_smem_virt = dma_alloc_coherent(NULL, ccci_smem_size, &ccci_smem_phy, GFP_KERNEL);
	if (ccci_smem_virt == NULL) {
	    CCCI_MSG_INF("ctl", "ccci_alloc_smem\n");
	    return -ENOMEM;
	}
	CCCI_CTL_MSG("ccci_smem_size=%d,ccci_smem_virt=%x,ccci_smem_phy=%x\n", 
		ccci_smem_size, (unsigned int)ccci_smem_virt, (unsigned int)ccci_smem_phy);
#endif

	WARN_ON(ccci_smem_phy&(0x4000-1)||ccci_smem_size&(0x4000-1));
	base_virt = (int)ccci_smem_virt;
	base_phy = (int)ccci_smem_phy;

	//LOG
	ccci_mdlog_smem_base_virt = base_virt;
	ccci_mdlog_smem_base_phy = base_phy;
	ccci_mdlog_smem_size = CCCI_MD_LOG_SIZE;
	base_virt += CCCI_MD_LOG_SIZE;
	base_phy += CCCI_MD_LOG_SIZE;

	// PCM
	ccci_pcm_smem_base_virt = base_virt;
	ccci_pcm_smem_base_phy = base_phy;
	ccci_pcm_smem_size = CCCI_PCM_SMEM_SIZE;
	base_virt += CCCI_PCM_SMEM_SIZE;
	base_phy += CCCI_PCM_SMEM_SIZE;
	// FS
	ccci_fs_smem_base_virt = base_virt;
	ccci_fs_smem_base_phy = base_phy;
	ccci_fs_smem_size = CCCI_FS_SMEM_SIZE;
	base_virt += CCCI_FS_SMEM_SIZE;
	base_phy += CCCI_FS_SMEM_SIZE;

	// RPC
	ccci_rpc_smem_base_virt = base_virt;
	ccci_rpc_smem_base_phy = base_phy;
	ccci_rpc_smem_size = CCCI_RPC_SMEM_SIZE;
	base_virt += CCCI_RPC_SMEM_SIZE;
	base_phy += CCCI_RPC_SMEM_SIZE;	

	// TTY
	for (i = 0; i < CCCI_TTY_PORT_COUNT ; i++) {
		ccci_tty_smem_base_virt[i] = base_virt;
		ccci_tty_smem_base_phy[i] = base_phy;
		ccci_tty_smem_size[i] = CCCI_TTY_SMEM_SIZE;
		base_virt += CCCI_TTY_SMEM_SIZE;
		base_phy += CCCI_TTY_SMEM_SIZE;
	}
	for (; i < CCCI_TTY_BUFF_NR; i++) {
		ccci_tty_smem_base_virt[i] = 0;
		ccci_tty_smem_base_phy[i] = 0;
		ccci_tty_smem_size[i] = 0;
	}

	// PMIC
	ccci_pmic_smem_base_virt = base_virt;
	ccci_pmic_smem_base_phy = base_phy;
	ccci_pmic_smem_size = CCCI_PMIC_SMEM_SIZE;
	base_virt += CCCI_PMIC_SMEM_SIZE;
	base_phy += CCCI_PMIC_SMEM_SIZE;

	// SYS
#ifdef AP_MD_EINT_SHARE_DATA
	ccci_sys_smem_base_virt = base_virt;
	ccci_sys_smem_base_phy = base_phy;
	ccci_sys_smem_size = CCCI_SYS_SMEM_SIZE;
	cores_exch_data = (struct ccci_cores_exch_data*)ccci_sys_smem_base_virt;
	base_virt += CCCI_SYS_SMEM_SIZE;
	base_phy += CCCI_SYS_SMEM_SIZE;
#endif
	// EXP
	ccci_exp_smem_base_virt = base_virt;
	ccci_exp_smem_base_phy = base_phy;
	ccci_exp_smem_size = MD_EX_LOG_SIZE;
	md_ex_log = (int*)ccci_exp_smem_base_virt ;
	base_virt += MD_EX_LOG_SIZE;
	base_phy += MD_EX_LOG_SIZE;
	
	//IPC
	ccci_ipc_smem_base_virt=base_virt;
	ccci_ipc_smem_base_phy=base_phy;
	ccci_ipc_smem_size=CCCI_IPC_SMEM_SIZE;
	base_virt += CCCI_IPC_SMEM_SIZE ;
	base_phy +=  CCCI_IPC_SMEM_SIZE;

	return ret;
}