예제 #1
0
static void collect_md_setting(void)
{
	unsigned long	*addr;
	unsigned int	*md_resv_mem_size_list;
	unsigned int	md1_en;

	addr = get_modem_start_addr_list();

  if( (md_usage_case&MD1_EN)== MD1_EN) { //Only MD1 enabled
		md1_en = 1;
		md_resv_mem_addr[MD_SYS1] = (unsigned int)addr[0];
		md_resv_smem_addr[MD_SYS1] = (unsigned int)(addr[0] + md_resv_mem_size[MD_SYS1]);
		md_resv_smem_base = (unsigned int)addr[0];
	} else { // No MD is enabled
		md1_en = 0;
		md_resv_mem_addr[MD_SYS1] = 0;
		md_resv_smem_addr[MD_SYS1] = 0;
		md_resv_smem_base = 0;
	}

	if ( (md_resv_mem_addr[MD_SYS1]&(32*1024*1024 - 1)) != 0 )
		printk("[ccci/ctl] (0) md1 memory addr is not 32M align!!!\n");

	if ( (md_resv_smem_addr[MD_SYS1]&(2*1024*1024 - 1)) != 0 )
		printk("[ccci/ctl] (0) md1 share memory addr %08x is not 2M align!!\n", md_resv_smem_addr[MD_SYS1]);

	printk("[ccci/ctl] (0)EN(%d):MemBase(0x%08X)\n", md1_en, md_resv_smem_base);

	printk("[ccci/ctl] (0)MemStart(0x%08X):MemSize(0x%08X)\n", \
		md_resv_mem_addr[MD_SYS1], md_resv_mem_size[MD_SYS1]);

	printk("[ccci/ctl] (0)SmemStart(0x%08X):SmemSize(0x%08X)\n", \
		md_resv_smem_addr[MD_SYS1], md_share_mem_size[MD_SYS1]);
}
unsigned int get_md_share_mem_start_addr(int md_id)
{
	unsigned long	*addr;
	unsigned int	md_smem_addr;
	addr = get_modem_start_addr_list();

	if((memory_usage_case&(MD1_EN|MD2_EN))==(MD1_EN|MD2_EN)) { // Both two MD enabled
		switch(md_id)
		{
			case MD_SYS1: 
				md_smem_addr = (unsigned int)(addr[0] + MD1_MEM_SIZE);
				break;

			case MD_SYS2: 
				md_smem_addr = (unsigned int)(addr[0] + MD1_MEM_SIZE + MD1_SMEM_SIZE);
				break;
				
			default:
				md_smem_addr = 0;
				break;
		}
	} else if((memory_usage_case&(MD1_EN|MD2_EN)) == MD1_EN) { // Only MD1 enabled
		switch(md_id)
		{
			case MD_SYS1: // For MD1
				md_smem_addr = (unsigned int)(addr[0] + MD1_MEM_SIZE);
				break;

			default:
				md_smem_addr = 0;
				break;
		}
	} else if((memory_usage_case&(MD1_EN|MD2_EN)) == MD2_EN) { // Only MD2 enabled
		switch(md_id)
		{
			case MD_SYS2: // For MD2
				md_smem_addr = (unsigned int)(addr[0] + MD2_MEM_SIZE);
				break;
				
			default:
				md_smem_addr = 0;
				break;
		}
	} else {
		md_smem_addr = 0;
	}

	//printk("[ccci/ctl] (%d)md%d share memory addr %08x\n", md_id+1, md_id+1, md_smem_addr);
	if ( (md_smem_addr&(2*1024*1024 - 1)) != 0 )
		printk("[ccci/ctl] (%d)md%d share memory addr %08x is not 2M align!!\n", md_id+1, md_id+1, md_smem_addr);

	return md_smem_addr;
}
//unsigned int get_md_mem_base_addr(int md_id)
unsigned int get_smem_base_addr(int md_id)
{
	unsigned long	*addr;
	unsigned int	md_addr;
	addr = get_modem_start_addr_list();

	if( (memory_usage_case&(MD1_EN|MD2_EN))==(MD1_EN|MD2_EN)) { // Both two MD enabled
		switch(md_id)
		{
			case MD_SYS1: // For MD1
			case MD_SYS2: // For MD2
				md_addr = (unsigned int)addr[0];
				break;
				
			default:
				md_addr = 0;
				break;
		}
	} else if( (memory_usage_case&(MD1_EN|MD2_EN))==(MD1_EN)) { //Only MD1 enabled
		switch(md_id)
		{
			case MD_SYS1: // For MD1
				md_addr = (unsigned int)addr[0];
				break;

			default:
				md_addr = 0;
				break;
		}
	} else if( (memory_usage_case&(MD1_EN|MD2_EN))==(MD2_EN)) { //Only MD2 enabled
		switch(md_id)
		{
			case MD_SYS2: // For MD2
				md_addr = (unsigned int)addr[0];
				break;
			default:
				md_addr = 0;
				break;
		}
	} else {
		md_addr = 0;
	}

	printk("[ccci/ctl] (%d)md%d memory base addr %08x\n", md_id+1, md_id+1, md_addr);
	if ( (md_addr&(32*1024*1024 - 1)) != 0 )
		printk("[ccci/ctl] md%d memory base addr is not 32M align!!!\n", md_id+1);

	return md_addr;
}