uffs_init.c

Go to the documentation of this file.
00001 
00007 #include "uffs/uffs_types.h"
00008 #include "uffs/uffs_public.h"
00009 #include "uffs/uffs_config.h"
00010 #include "uffs/uffs_tree.h"
00011 #include "uffs/uffs_fs.h"
00012 #include "uffs/uffs_badblock.h"
00013 #include <string.h>
00014 
00015 #define PFX "init:"
00016 
00017 URET uffs_InitDevice(uffs_Device *dev)
00018 {
00019     URET ret;
00020 
00021     memset(&(dev->st), 0, sizeof(uffs_stat));
00022     uffs_InitBadBlock(dev);
00023 
00024     if(uffs_InitFlashClass(dev) != U_SUCC) {
00025         uffs_Perror(UFFS_ERR_SERIOUS, PFX"Can't initialize flash class!\n");
00026     }
00027 
00028     uffs_Perror(UFFS_ERR_NOISY, PFX"init page buf\n");
00029     ret = uffs_BufInit(dev, MAX_PAGE_BUFFERS, MAX_DIRTY_PAGES_IN_A_BLOCK);
00030     if(ret != U_SUCC) {
00031         uffs_Perror(UFFS_ERR_DEAD, PFX"Initialize page buffers fail\n");
00032         return U_FAIL;
00033     }
00034     uffs_Perror(UFFS_ERR_NOISY, PFX"init block info cache\n");
00035     ret = uffs_InitBlockInfoCache(dev, MAX_CACHED_BLOCK_INFO);
00036     if(ret != U_SUCC) {
00037         uffs_Perror(UFFS_ERR_DEAD, PFX"Initialize block info fail\n");
00038         return U_FAIL;
00039     }
00040 
00041     ret = uffs_InitTreeBuf(dev);
00042     if(ret != U_SUCC) {
00043         uffs_Perror(UFFS_ERR_SERIOUS, PFX"fail to init tree buffers\n");
00044         return U_FAIL;
00045     }
00046 
00047     ret = uffs_BuildTree(dev);
00048     if(ret != U_SUCC) {
00049         uffs_Perror(UFFS_ERR_SERIOUS, PFX"fail to build tree\n");
00050         return U_FAIL;
00051     }
00052 
00053     return U_SUCC;
00054 }
00055 
00056 URET uffs_ReleaseDevice(uffs_Device *dev)
00057 {
00058     URET ret;
00059 
00060     ret = uffs_ReleaseBlockInfoCache(dev);
00061     if(ret != U_SUCC) {
00062         uffs_Perror(UFFS_ERR_SERIOUS, PFX "fail to release block info.\n");
00063         return U_FAIL;
00064     }
00065 
00066     ret = uffs_BufReleaseAll(dev);
00067     if(ret != U_SUCC) {
00068         uffs_Perror(UFFS_ERR_SERIOUS, PFX "fail to release page buffers\n");
00069         return U_FAIL;
00070     }
00071 
00072     ret = uffs_ReleaseTreeBuf(dev);
00073     if(ret != U_SUCC) {
00074         uffs_Perror(UFFS_ERR_SERIOUS, PFX"fail to release tree buffers!\n");
00075         return U_FAIL;
00076     }
00077 
00078     return ret;
00079 
00080 }
00081 
00082 URET uffs_initMountTable(struct uffs_mountTableSt *tbl)
00083 {
00084     struct uffs_mountTableSt *work;
00085 
00086     uffs_InitObjectBuf();
00087 
00088     for(work = tbl; work->dev != NULL; work++) {
00089         if(work->dev->Init(work->dev) == U_FAIL) {
00090             return U_FAIL;
00091         }
00092 
00093         work->dev->par.start = work->startBlock;
00094         if(work->endBlock < 0) {
00095             work->dev->par.end = work->dev->attr.total_blocks + work->endBlock;
00096         }
00097         else {
00098             work->dev->par.end = work->endBlock;
00099         }
00100         uffs_Perror(UFFS_ERR_NOISY, PFX"mount partiton: %d,%d\n",
00101             work->dev->par.start, work->dev->par.end);
00102         uffs_InitDevice(work->dev);
00103     }
00104     return U_SUCC;
00105 }
00106 
00107 URET uffs_releaseMountTable(struct uffs_mountTableSt *tbl)
00108 {
00109     struct uffs_mountTableSt *work;
00110     for(work = tbl; work->dev != NULL; work++) {
00111         uffs_ReleaseDevice(work->dev);
00112         work->dev->Release(work->dev);
00113     }
00114     return U_SUCC;
00115 }
00116 

Generated on Sat Mar 17 15:45:45 2007 for uffs-doc by  doxygen 1.5.0