コード例 #1
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
static ssize_t modem_entry_show(struct device *dev, struct device_attribute *attr,
                                        char *buf)
{
    unsigned long val = 0;

    val = g_ccore_entry ;
    hi_trace(HI_DEBUG, "modem_entry_show \r\n");

    return snprintf(buf, sizeof(val), "%lu\n", val);
}
コード例 #2
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
static ssize_t log_level_get(struct device *dev, struct device_attribute *attr,
                               char *buf)
{
    int val = 0;

    val = g_debug_level ;
    hi_trace(HI_DEBUG, "log_level_get \r\n");

    return snprintf(buf, sizeof(val), "%d\n", val);
}
コード例 #3
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
int his_modem_load_vxworks(char *part_name)
{
    int ret = 0;
    int offset = 0;
    int skip_len = 0;
    u32 image_total_length = 0;
    void *image_load_addr = 0;

    struct image_head head;

    hi_trace(HI_INFO, ">>loading:%s.....\r\n", part_name);

    ret = bsp_nand_read(part_name, (FSZ)0, &head, sizeof(struct image_head) , &skip_len);
    if (NAND_OK != ret)
    {
        hi_trace(HI_ERR, "fail to read vxworks image head, error code 0x%x\r\n", ret);
        return NAND_ERROR;
    }

    if (memcmp(head.image_name, CCORE_IMAGE_NAME, sizeof(CCORE_IMAGE_NAME)))
    {
        hi_trace(HI_ERR, "vxworks image error!!.\r\n");
        return NAND_ERROR;
    }

    offset += sizeof(struct image_head) + skip_len;
    image_total_length = (u32)head.image_length;

    image_load_addr = (void*)g_ccore_entry;

    ret = bsp_nand_read(part_name, offset, image_load_addr, image_total_length, &skip_len);
    if(NAND_OK != ret)
    {
        hi_trace(HI_ERR, "fail to read vxworks image, error code 0x%x\r\n", ret);
        goto exit;
    }

    hi_trace(HI_INFO, ">>load vxworks ok, entey %#x, length %#x\r\n", head.load_addr, head.image_length);

exit:

    return ret;
}
コード例 #4
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
static int __init his_modem_init_driver(void)
{
    int ret = 0;
/*BEGIN DTS2013070201336 w00183456 2013/07/02 modified*/
#if (FEATURE_ON == MBB_DLOAD)
    huawei_smem_info *smem_data = NULL;
    smem_data = (huawei_smem_info *)SRAM_DLOAD_ADDR;
    
    if (NULL == smem_data)
    {
        hi_trace(HI_ERR,"Dload smem_data malloc fail!\n");
        return -1;
    }

    if(SMEM_DLOAD_FLAG_NUM == smem_data->smem_dload_flag)
    {
        return ret;
    }
#endif /*MBB_DLOAD*/
/*END DTS2013070201336 w00183456 2013/07/02 modified*/

    hi_trace(HI_DEBUG, "his_modem_init_driver.\r\n");

    ret = platform_device_register(&his_modem_device);
    if(ret)
    {
        hi_trace(HI_ERR, "register his_modem device failed\r\n");
        return ret;
    }

    ret = platform_driver_register(&his_modem_drv);
    if(ret)
    {
        hi_trace(HI_ERR, "register his_modem driver failed\r\n");
        platform_device_unregister(&his_modem_device);
    }

    /*BEGIN DTS2013082201599  l00212897 2013/08/22 deleted*/

    return ret;

}
コード例 #5
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
static ssize_t modem_entry_store(struct device *dev, struct device_attribute *attr,
                                       const char *buf, size_t count)
{
    int status = count;
    long val = 0;

    if ((strict_strtol(buf, 10, &val) < 0))
        return -EINVAL;

    /* ccore_entry_addr = val; */
    hi_trace(HI_DEBUG, "modem_entry_store 0x%x \r\n", (unsigned int)val);

    return status;
}
static int __init his_modem_init_driver(void)
{
    int ret = 0;

    hi_trace(HI_DEBUG, "his_modem_init_driver.\r\n");

    ret = platform_device_register(&his_modem_device);
    if(ret)
    {
        hi_trace(HI_ERR, "register his_modem device failed\r\n");
        return ret;
    }

    ret = platform_driver_register(&his_modem_drv);
    if(ret)
    {
        hi_trace(HI_ERR, "register his_modem driver failed\r\n");
        platform_device_unregister(&his_modem_device);
    }

    return ret;

}
コード例 #7
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
static ssize_t log_level_set(struct device *dev, struct device_attribute *attr,
                               const char *buf, size_t count)
{
    int status = count;
    int val = 0;

    if ((kstrtoint(buf, 10, &val) < 0))
        return -EINVAL;

    g_debug_level = val;

    hi_trace(HI_DEBUG, "log_level_set 0x%x \r\n", (unsigned int)val);

    return status;
}
コード例 #8
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
static void __exit his_modem_exit_driver(void)
{
    /*BEGIN DTS2013070201336 w00183456 2013/07/02 modified*/
#if (FEATURE_ON == MBB_DLOAD)
    huawei_smem_info *smem_data = NULL;
    smem_data = (huawei_smem_info *)SRAM_DLOAD_ADDR;
    
    if (NULL == smem_data)
    {
        hi_trace(HI_ERR,"Dload smem_data malloc fail!\n");
        return -1;
    }

    if(SMEM_DLOAD_FLAG_NUM != smem_data->smem_dload_flag)
    {
        platform_driver_unregister(&his_modem_drv);
        platform_device_unregister(&his_modem_device);
    }
#else
    platform_driver_unregister(&his_modem_drv);
    platform_device_unregister(&his_modem_device);
#endif /*MBB_DLOAD*/
/*END DTS2013070201336 w00183456 2013/07/02 modified*/   
}
コード例 #9
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
int his_modem_load_vxworks(char *part_name)
{
    int ret = 0;
    int offset = 0;
    int skip_len = 0;
    u32 image_total_length = 0;
    void *image_load_addr = 0;
    decompress_fn inflate_fn = NULL;

    struct image_head head;

    hi_trace(HI_INFO, ">>loading:%s.....\r\n", part_name);

    ret = bsp_nand_read(part_name, (FSZ)0, &head, sizeof(struct image_head) , &skip_len);
    if (NAND_OK != ret)
    {
        hi_trace(HI_ERR, "fail to read vxworks image head, error code 0x%x\r\n", ret);
        return NAND_ERROR;
    }

    /*coverity[uninit_use_in_call] */
    if (memcmp(head.image_name, CCORE_IMAGE_NAME, sizeof(CCORE_IMAGE_NAME)))
    {
        hi_trace(HI_ERR, "vxworks image error!!.\r\n");
        return NAND_ERROR;
    }

    /*coverity[uninit_use] */
    if (head.image_length + 2*IDIO_LEN + OEM_CA_LEN > PRODUCT_CFG_FLASH_CCORE_LEN)
    {
        hi_trace(HI_ERR, "loadsize is incorrect, 0x%x!\r\n",
            head.image_length + 2*IDIO_LEN + OEM_CA_LEN);
        return NAND_ERROR;
    }

    /*coverity[uninit_use_in_call] */
    g_ccore_entry = (u32)ioremap_cached(head.load_addr, DDR_MCORE_SIZE - (MCORE_TEXT_START_ADDR - DDR_MCORE_ADDR));
    if(!g_ccore_entry)
    {
        hi_trace(HI_ERR, "ioremap failed.\r\n");
        return NAND_ERROR;
    }

    offset += sizeof(struct image_head) + skip_len;
    image_total_length = (u32)head.image_length + 2*IDIO_LEN + OEM_CA_LEN;

    /*coverity[uninit_use] */
    if (head.is_compressed)
    {
        image_load_addr = (void*)g_ccore_entry - (MCORE_TEXT_START_ADDR - DDR_MCORE_ADDR)
            + DDR_MCORE_SIZE - image_total_length;
    }
    else
    {
        image_load_addr = (void*)g_ccore_entry;
    }

    ret = bsp_nand_read(part_name, offset, image_load_addr, image_total_length, &skip_len);
    if(NAND_OK != ret)
    {
        hi_trace(HI_ERR, "fail to read vxworks image, error code 0x%x\r\n", ret);
        goto exit;
    }

    ret = bsp_sec_check((u32)image_load_addr, head.image_length);
    if (ret)
    {
        hi_trace(HI_ERR, "fail to check vxworks image, error code 0x%x\r\n", ret);
        goto exit;
    }

    if (head.is_compressed)
    {
        hi_trace(HI_INFO, ">>start to decompress vxworks image ...\r\n");
        inflate_fn = decompress_method((const unsigned char *)image_load_addr, 2, NULL);
        if (inflate_fn)
        {
            ret = inflate_fn((unsigned char*)image_load_addr,
                head.image_length, NULL, NULL, (unsigned char*)g_ccore_entry,
                NULL, (void(*)(char*))printk);
            if (ret)
            {
                hi_trace(HI_ERR, "fail to decompress vxworks image, error code 0x%x\r\n", ret);
                goto exit;
            }
        }
        else
        {
            hi_trace(HI_ERR, "fail to get decompress method\r\n");
            goto exit;
        }
    }

    /* flush cache */
    __dma_single_cpu_to_dev_noverify((const void *)g_ccore_entry,
                     DDR_MCORE_SIZE - (MCORE_TEXT_START_ADDR - DDR_MCORE_ADDR),
                     CACHE_DMA_TO_DEVICE);

    hi_trace(HI_INFO, ">>load vxworks ok, entey %#x, length %#x\r\n", head.load_addr, head.image_length);

exit:
    iounmap((void volatile *)g_ccore_entry);

    return ret;
}
コード例 #10
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
static int __init his_modem_probe(struct platform_device *pdev)
{
    int ret = 0;
#ifdef BSP_CONFIG_HI3630
    u32 image_load_addr = 0;
    u32 image_length = 0;

extern unsigned int is_load_modem(void);

	/* 如果是升级模式,则不激活modem */
	if(!is_load_modem())
	{
        hi_trace(HI_ERR, "upload or charge mode, will not start modem.\r\n");
		return 0;
	}

    if (readl((void*)SHM_MEM_LOADM_ADDR) != LOAD_MODEM_OK_FLAG)
    {
        hi_trace(HI_ERR, "modem image not found\r\n");
        return -1;
    }

    image_load_addr = readl((void*)SHM_MEM_LOADM_ADDR + 4);
    image_length = readl((void*)SHM_MEM_LOADM_ADDR + 8);

    g_ccore_entry = (u32)ioremap_nocache(image_load_addr, image_length);
    if(!g_ccore_entry)
    {
        hi_trace(HI_ERR, "ioremap failed. image size: 0x%X\r\n", image_length);
        return NAND_ERROR;
    }

#else
    struct ST_PART_TBL * mc_part = NULL;

    hi_trace(HI_DEBUG, "his_modem_probe.\r\n");

    mc_part = find_partition_by_name(PTABLE_VXWORKS_NM);
    if(NULL == mc_part)
    {
        hi_trace(HI_ERR, "load ccore image succeed\r\n");
        return -EAGAIN;
    }

    if(NAND_OK == his_modem_load_vxworks(mc_part->name))
    {
        hi_trace(HI_DEBUG, "load ccore image succeed\r\n");
    }
    else
    {
        hi_trace(HI_ERR, "load ccore image failed\r\n");
        return -EAGAIN;
    }

    ret = sysfs_create_group(&pdev->dev.kobj, &his_modem_group);
    if (0 != ret)
    {
        hi_trace(HI_ERR,"create his modem sys filesystem node failed.\n");
        return -ENXIO;
    }

#endif

    ret = his_modem_ipc_send();
    if (ret)
    {
        hi_trace(HI_ERR, "load ccore image failed, ret=0x%x\r\n", ret);
    }
    else
    {
        hi_trace(HI_ERR, "load ccore image succeed\r\n");
    }

    return ret;

}
コード例 #11
0
ファイル: loadm.c プロジェクト: samm-git/e3372h-vendor-src
/*****************************************************************************
 函 数 名  : his_modem_activate_ccore
 功能描述  : 激活C核
 输入参数  : ccore_entry_addr:c核入口地址
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :
*****************************************************************************/
static void his_modem_activate_ccore(u32 ccore_entry_addr)
{
    hi_ccore_set_entry_addr(ccore_entry_addr);
    hi_ccore_active();
    hi_trace(HI_DEBUG, "end hi_ccore_active\n");
}