u32 nv_flash_init(void) { u32 ret = NV_ERROR; u32 i = 0; nv_file_debug(NV_FILE_INIT_API,0,0,0,0); /*first init every file sem*/ for(i = 0;i<NV_FILE_BUTT;i++) { osl_sem_init(1,&g_nv_file[i].file_sem); } memset(&g_flash_info,0,sizeof(struct nv_flash_global_ctrl_stru)); memset(&g_sec_info,0xff,sizeof(struct nv_sec_file_block_info)); /*get dload info*/ ret = nv_dload_file_info_init(); if(ret) { nv_file_debug(NV_FILE_INIT_API,1,ret,0,0); goto nv_flash_init_err; } /*get sys nv file info*/ ret = nv_sec_file_info_init(g_nv_file[NV_FILE_SYS_NV].name,&g_flash_info.sys_nv,g_sec_info.sys_nv); if(ret) { nv_file_debug(NV_FILE_INIT_API,2,ret,0,0); goto nv_flash_init_err; } /*get backup info*/ ret = nv_sec_file_info_init(g_nv_file[NV_FILE_BACKUP].name,&g_flash_info.bak_sec,g_sec_info.nv_bak); if(ret) { nv_file_debug(NV_FILE_INIT_API,3,ret,0,0); goto nv_flash_init_err; } /*get default info*/ ret = nv_sec_file_info_init(g_nv_file[NV_FILE_DEFAULT].name,&g_flash_info.def_sec,g_sec_info.nv_default); if(ret) { nv_file_debug(NV_FILE_INIT_API,4,ret,0,0); goto nv_flash_init_err; } return NV_OK; nv_flash_init_err: nv_mntn_record("\n[%s]\n",__func__); nv_flash_help(NV_FILE_INIT_API); return NV_ERROR; }
u32 nv_emmc_init(void) { u32 ret = NV_ERROR; u32 i = 0; nv_file_debug(NV_FILE_INIT_API,0,0,0,0); /*first init every file sem*/ for(i = 0;i<NV_FILE_BUTT;i++) { osl_sem_init(1,&g_nv_file[i].file_sem); } memset(&g_emmc_info,0,sizeof(struct nv_emmc_global_ctrl_stru)); /*get sys nv info*/ ret = nv_sec_file_info_init(g_nv_file[NV_FILE_SYS_NV].name,&g_emmc_info.sys_nv); if(ret) { nv_file_debug(NV_FILE_INIT_API,1,ret,(u32)(unsigned long)g_nv_file[NV_FILE_SYS_NV].mtd,NV_FILE_SYS_NV); goto nv_emmc_init_err; } /*get dload info*/ ret = nv_dload_file_info_init(); if(ret) { nv_file_debug(NV_FILE_INIT_API,2,ret,0,NV_FILE_DLOAD); goto nv_emmc_init_err; } /*get backup info*/ ret = nv_sec_file_info_init(g_nv_file[NV_FILE_BACKUP].name,&g_emmc_info.bak_sec); if(ret) { nv_file_debug(NV_FILE_INIT_API,3,ret,0,NV_FILE_BACKUP); goto nv_emmc_init_err; } /*get default info*/ ret = nv_sec_file_info_init(g_nv_file[NV_FILE_DEFAULT].name,&g_emmc_info.def_sec); if(ret) { nv_file_debug(NV_FILE_INIT_API,4,ret,0,NV_FILE_DEFAULT); goto nv_emmc_init_err; } return NV_OK; nv_emmc_init_err: printf("\n[%s]\n",__func__); nv_emmc_help(NV_FILE_INIT_API); return NV_ERROR; }
FILE* nv_emmc_open(const s8* path,const s8* mode) { u32 ret = NV_ERROR; u32 i = 0; struct nv_emmc_file_header_stru* fd = NULL; u32 offset = 0; u32 len = 0; struct mtd_info* mtd = NULL; nv_file_debug(NV_FILE_OPEN_API,0,0,0,0); for(i=0; i<NV_FILE_BUTT; i++) { if(0 == strcmp(path,g_nv_file[i].path)) { fd = &g_nv_file[i]; mtd = get_mtd_device_nm(fd->name); if(IS_ERR(mtd)) { printf("[%s]:get mtd device err! %s\n",__func__,fd->name); return NULL; } g_nv_file[i].mtd = mtd; break; } } if(NULL == fd) { nv_file_debug(NV_FILE_OPEN_API,1,0,0,0); return NULL; } osl_sem_down(&fd->file_sem); switch(fd->emmc_type) { case NV_FILE_DLOAD: ret = nv_get_nvbin_info(mode,&offset,&len); break; case NV_FILE_BACKUP: ret = nv_sec_file_info_init(g_nv_file[NV_FILE_BACKUP].name,&g_emmc_info.bak_sec); ret |= nv_get_back_info(mode,&offset,&len); break; case NV_FILE_XNV_CARD_1: ret = nv_get_xnv_info(NV_USIMM_CARD_1,&offset,&len); break; case NV_FILE_CUST_CARD_1: ret = nv_get_cust_info(NV_USIMM_CARD_1,&offset,&len); break; case NV_FILE_XNV_CARD_2: ret = nv_get_xnv_info(NV_USIMM_CARD_2,&offset,&len); break; case NV_FILE_CUST_CARD_2: ret = nv_get_cust_info(NV_USIMM_CARD_2,&offset,&len); break; case NV_FILE_SYS_NV: ret = nv_get_sys_nv_info(mode,&offset,&len); break; case NV_FILE_DEFAULT: ret = nv_get_default_info(mode,&offset,&len); break; case NV_FILE_XNV_MAP_CARD_1: ret = nv_get_xnv_map_info(NV_USIMM_CARD_1,&offset,&len); break; case NV_FILE_XNV_MAP_CARD_2: ret = nv_get_xnv_map_info(NV_USIMM_CARD_2,&offset,&len); break; default: ret = BSP_ERR_NV_INVALID_PARAM; } if(NV_OK != ret) { put_mtd_device(fd->mtd); osl_sem_up(&fd->file_sem); nv_file_debug(NV_FILE_OPEN_API,3,fd->emmc_type,ret,0); return NULL; } fd->ops ++; fd->seek = 0; fd->length = len; fd->off = offset; fd->fp = fd; return fd; }