/* * Function : sc_icc_task * Discription: c core nv init,this phase build upon the a core kernel init, * this phase after icc init,this phase ensure to use all nv api normal * start at this phase ,ops global ddr need spinlock * Parameter : none * Output : result * History : */ void sc_icc_task(void) { s32 read_len = 0; s32 sc_fp = 0; s8* sc_path = (s8*)SC_PACKET_TRANS_FILE; sc_icc_stru icc_recv = {MISC_SC_OPT_BUTT}; /* coverity[no_escape] */ /* coverity[loop_top] */ for(;;) { osl_sem_down(&g_sc_stat.sc_tsk_sem); sc_debug_printf("get sem ok!\n"); read_len = bsp_icc_read(SC_ICC_CHAN_ID, (u8*)&icc_recv, sizeof(sc_icc_stru)); if(read_len > (s32)sizeof(sc_icc_stru)) { osl_sem_up(&g_sc_stat.sc_tsk_sem); sc_error_printf("bsp icc read error, chanid :0x%x ret :0x%x\n",SC_ICC_CHAN_ID,read_len); continue; } else if(0 >= read_len) { sc_error_printf("bsp icc read error, length is 0x%x!\n", read_len); continue ; } if( MISC_SC_OPT_READ == icc_recv.sc_opt_type) { if(SC_OK == icc_recv.sc_cnf_ret) { sc_fp = bsp_open(sc_path, (RFILE_RDONLY), 0660); /* [false alarm]: fortify 误报*/ if(sc_fp < 0) { sc_error_printf("open file %s failed!\n",sc_path); g_sc_stat.sc_opt_ret = BSP_ERR_SC_NO_FILE; osl_sem_up(&g_sc_stat.sc_api_sem); continue ; } read_len = bsp_read((u32)sc_fp, (s8 *)(g_sc_stat.sc_ram_addr), g_sc_stat.sc_ram_len); /* [false alarm]: fortify 误报*/ if(read_len != (s32)(g_sc_stat.sc_ram_len)) { sc_error_printf("read %s fail, read len is 0x%x, given len is 0x%x!\n",sc_path,read_len,g_sc_stat.sc_ram_len); bsp_close((u32)sc_fp); g_sc_stat.sc_opt_ret = BSP_ERR_SC_READ_FILE_FAIL; osl_sem_up(&g_sc_stat.sc_api_sem); continue ; } bsp_close((u32)sc_fp); } } sc_debug_printf("send to api interface\n"); g_sc_stat.sc_opt_ret = icc_recv.sc_cnf_ret; osl_sem_up(&g_sc_stat.sc_api_sem); } }
/* * Function : sc_bakup * Discription: c core nv init,this phase build upon the a core kernel init, * this phase after icc init,this phase ensure to use all nv api normal * start at this phase ,ops global ddr need spinlock * Parameter : none * Output : result * History : */ s32 sc_bakup(s8 *pdata, u32 len) { s32 sc_fp = 0; s32 wlen = 0; u32 sc_mtd_len = 0; struct mtd_info* mtd; sc_fp = bsp_open((char *)SC_PACKET_TRANS_FILE,(RFILE_RDONLY),0660); if(!sc_fp) { sc_error_printf("bsp_open error, chanid :0x%x sc_fp :0x%x\n",SC_ICC_CHAN_ID,sc_fp); return BSP_ERR_SC_NO_FILE; } else { sc_debug_printf("bsp_open ok, file is 0x%x!\n",sc_fp); } wlen = bsp_read(sc_fp, pdata, len); if(wlen != len) { sc_error_printf("bsp_read error, opt_len :0x%x sc_ram_len :0x%x\n", wlen, len); bsp_close(sc_fp); return BSP_ERR_SC_READ_FILE_FAIL; } else { sc_debug_printf("bsp_read ok, len is 0x%x!\n",(u32)(wlen)); } bsp_close(sc_fp); mtd = get_mtd_device_nm((char*)SC_BACKUP_SEC_NAME); if (IS_ERR(mtd)) { sc_error_printf("get mtd device err! %s\n",mtd); return BSP_ERR_READ_MTD_FAIL; } sc_mtd_len = mtd->size; sc_debug_printf("mtd len: 0x%x\n",sc_mtd_len); put_mtd_device(mtd); if((sc_mtd_len < SC_MTD_PTABLE_OFFSET) || (len >= SC_MTD_PTABLE_OFFSET)) { sc_error_printf("mtd length err! sc_mtd_len: 0x%x, len: 0x%x\n",sc_mtd_len, len); return BSP_ERR_READ_LGTH_FAIL; } wlen = bsp_nand_write((char*)SC_BACKUP_SEC_NAME, (sc_mtd_len - SC_MTD_PTABLE_OFFSET), pdata, len); if(wlen != BSP_OK) { sc_error_printf("mtd length err! wlen 0x%x, len is 0x%x\n",wlen,len); return BSP_ERR_SC_WRITE_FILE_FAIL; } sc_debug_printf("sc write to nand ok, len is 0x%x!\n",(u32)(wlen)); return SC_OK; }
/************************************************************************* 函 数 名 : rfile_test_001 功能描述 : 新建目录-->新建文件-->写入内容-->读取内容-->关闭文件-->获取文件状态 *************************************************************************/ s32 rfile_test_001(void) { s32 ret; s8 *dirpar = "/rfiletest001"; s8 *filepath = "/rfiletest001/rfile001.txt"; s8 *wrbuf = "1234567890abcdefghijklmnopqrstuvwxyz"; s8 *rfilewrtmp = NULL; s8 *rfilerdtmp = NULL; s8 rdbuf[64] = {0}; s32 pfile; struct rfile_stat_stru buf = {0}; rfile_print_info("[%s] start =======================================.\n\n", __FUNCTION__); rfile_print_info("test for : mkdir-->fopen-->fseek-->fwrite-->fwrite-->"); rfile_print_info("ftell-->fseek-->ftell-->fread-->fread-->fclose-->stat.\n\n"); rfilewrtmp = Rfile_Malloc(8888); memset(rfilewrtmp, 'x', 8888); rfilerdtmp = Rfile_Malloc(8888); memset(rfilerdtmp, 0, 8888); ret = bsp_mkdir(dirpar, 0660); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_mkdir failed.\n"); goto rfile_test_001_fail_1; } pfile = bsp_open(filepath, (RFILE_CREAT|RFILE_RDWR), 0755); if(pfile < 0) { rfile_print_info("!!!!!!!! bsp_open failed.\n"); goto rfile_test_001_fail_1; } ret = bsp_lseek(pfile, 0, SEEK_SET); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_fseek 1 failed .\n"); goto rfile_test_001_fail_2; } ret = bsp_write(pfile, wrbuf, strlen(wrbuf)); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fwrite 1 failed .\n"); goto rfile_test_001_fail_2; } ret = bsp_write(pfile, rfilewrtmp, 8888); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fwrite 2 failed .\n"); goto rfile_test_001_fail_2; } rfile_print_info("BSP_fwrite %d bytes.\n", ret); for(ret = 0; ret < 28; ret++) { rfile_print_info("-0x%x-", rfilewrtmp[ret]); } rfile_print_info(".\n"); for(ret = 8880; ret < 8888; ret++) { rfile_print_info("-0x%x-", rfilewrtmp[ret]); } rfile_print_info(".\n"); ret = bsp_tell(pfile); if(ret < 0) { rfile_print_info("!!!!!!!! BSP_ftell 1 failed 0x%x.\n", ret); } else { rfile_print_info("!!!!!!!! BSP_ftell 1 success 0x%x .\n", ret); } ret = bsp_lseek(pfile, 0, SEEK_SET); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_fseek 2 failed .\n"); } ret = bsp_tell(pfile); if(ret < 0) { rfile_print_info("!!!!!!!! BSP_ftell 2 failed 0x%x.\n", ret); } else { rfile_print_info("!!!!!!!! BSP_ftell 2 success 0x%x .\n", ret); } ret = bsp_read(pfile, rdbuf, 64); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fread 1 failed .\n"); goto rfile_test_001_fail_2; } ret = bsp_read(pfile, rfilerdtmp, 8888); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fread 2 failed .\n"); goto rfile_test_001_fail_2; } rfile_print_info("BSP_fread %d bytes.\n", ret); for(ret = 0; ret < 28; ret++) { rfile_print_info(" 0x%x ", rfilerdtmp[ret]); } rfile_print_info(".\n"); for(ret = 8880; ret < 8888; ret++) { rfile_print_info(" 0x%x ", rfilerdtmp[ret]); } rfile_print_info(".\n"); ret = bsp_close(pfile); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! bsp_close failed.\n"); goto rfile_test_001_fail_1; } ret = bsp_stat(filepath, &buf); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_stat failed.\n"); goto rfile_test_001_fail_1; } else { rfile_print_info("BSP_stat : buf.mtime.tv_sec %d, buf.mtime.tv_nsec %d, buf.blksize %d\n", (int)buf.mtime.tv_sec, (int)buf.mtime.tv_nsec, (int)buf.blksize); } rfile_print_info("[%s] success.\n", __FUNCTION__); rfile_print_info("[%s] end =======================================.\n", __FUNCTION__); return 0; rfile_test_001_fail_2: bsp_close(pfile); rfile_test_001_fail_1: rfile_print_info("[%s] end =======================================.\n", __FUNCTION__); return -1; }