uffs_device.h

Go to the documentation of this file.
00001 
00007 #ifndef UFFS_DEVICE_H
00008 #define UFFS_DEVICE_H
00009 
00010 
00011 #include "uffs/uffs_types.h"
00012 #include "uffs/uffs_config.h"
00013 #include "uffs/uffs_buf.h"
00014 #include "uffs/uffs_blockInfo.h"
00015 #include "uffs/ubuffer.h"
00016 #include "uffs/uffs_tree.h"
00017 #include "uffs/uffs_mem.h"
00018 
00019 #ifdef __cplusplus
00020 extern "C"{
00021 #endif
00022 
00023 /************************* uffs device *************************/
00028 struct uffs_FlashOpsSt {
00029     URET (*LoadPageSpare)(uffs_Device *dev, int block, int page, uffs_Tags *tag);
00030     URET (*WritePageSpare)(uffs_Device *dev, int block, int page, uffs_Tags *tag);
00031     URET (*MakePageValid)(uffs_Device *dev, int block, int page, uffs_Tags *tag);
00032     int  (*GetEccSize)(uffs_Device *dev);
00033     void (*MakeEcc)(uffs_Device *dev, void *data, void *ecc);
00034     int (*EccCollect)(uffs_Device *dev, void *data, void *read_ecc, const void *test_ecc);
00035     UBOOL (*IsBlockBad)(uffs_Device *dev, uffs_blockInfo *bc);
00036     URET (*MakeBadBlockMark)(uffs_Device *dev, int block);
00037 };
00038 
00043 struct uffs_FlashClassSt {
00044     const char *className;
00045     int maker;
00046     int *id_list;
00047     struct uffs_FlashOpsSt *flash;
00048 };
00049 
00054 struct uffs_DeviceOpsSt {
00055     URET (*Reset)(uffs_Device *dev);
00056     UBOOL (*IsBlockBad)(uffs_Device *dev, u32 block);
00057     URET (*EraseBlock)(uffs_Device *dev, u32 block);
00058     URET (*WritePage)(uffs_Device *dev, u32 block, u32 pageNum, const u8 *page, const u8 *spare);
00059     URET (*WritePageData)(uffs_Device *dev, u32 block, u32 pageNum, const u8 *page, int ofs, int len);
00060     URET (*WritePageSpare)(uffs_Device *dev, u32 block, u32 pageNum, const u8 *spare, int ofs, int len);
00061     URET (*ReadPage)(uffs_Device *dev, u32 block, u32 pageNum, u8 *page, u8 *spare);
00062     URET (*ReadPageData)(uffs_Device *dev, u32 block, u32 pageNum, u8 *page, int ofs, int len);
00063     URET (*ReadPageSpare)(uffs_Device *dev, u32 block, u32 pageNum, u8 *spare, int ofs, int len);
00064 };
00065 
00066 
00067 
00069 #define UFFS_DEV_NULL       0
00070 #define UFFS_DEV_NAND       1
00071 #define UFFS_DEV_SM         2
00072 #define UFFS_DEV_RAM        3
00073 #define UFFS_DEV_ROM        4
00074 #define UFFS_DEV_EMU        5
00075 
00076 
00081 struct uffs_storageAttrSt {
00082     u32 dev_type;           
00083     int maker;              
00084     int id;                 
00085     u32 total_blocks;       
00086     u32 block_data_size;    
00087     u16 page_data_size;     
00088     u16 spare_size;         
00089     u16 pages_per_block;    
00090 };
00091 
00092 
00097 struct uffs_blockInfoCacheSt {
00098     uffs_blockInfo *head;           
00099     uffs_blockInfo *tail;
00100     int maxBlockCached;             
00101     void *internalBufHead;          
00102 };
00103 
00108 struct uffs_partitionSt {
00109     u16 start;      
00110     u16 end;        
00111 };
00112 
00117 struct uffs_lockSt {
00118     u32 sem;
00119     u32 task_id;
00120 };
00121 
00125 struct uffs_pageBufsSt {
00126     uffs_Buf *bufHead;
00127     uffs_Buf *bufTail;
00128     uffs_Buf *dirty;
00129     int maxBuf;
00130     int maxDirtyBuf;
00131     int dirtyCount;
00132     void *pool;
00133 };
00134 
00135 
00141 struct uffs_commInfoSt {
00142     u32 pgDataSize;         
00143     u32 eccSize;            
00144     u32 pgSize;             
00145 };
00146 
00147 
00148 struct uffs_newBadBlockSt {
00149     u16 block;              
00150 };
00151 
00153 typedef struct {
00154     int blockEraseCount;
00155     int pageWriteCount;
00156     int pageReadCount;
00157     int spareWriteCount;
00158     int spareReadCount;
00159 } uffs_stat;
00160 
00161 
00167 struct uffs_DeviceSt {
00168     URET (*Init)(uffs_Device *dev);             
00169     URET (*Release)(uffs_Device *dev);          
00170     void *private;                              
00171 
00172     struct uffs_storageAttrSt attr;             
00173     struct uffs_partitionSt par;                
00174     struct uffs_FlashOpsSt *flash;              
00175     struct uffs_DeviceOpsSt *ops;               
00176     struct uffs_blockInfoCacheSt bc;            
00177     struct uffs_lockSt lock;                    
00178     struct uffs_pageBufsSt buf;                 
00179     struct uffs_commInfoSt com;                 
00180     struct uffs_treeSt tree;                    
00181     struct uffs_newBadBlockSt bad;              
00182     uffs_stat st;                               
00183     struct uffs_memAllocatorSt *mem;            
00184     u32 refCount;                               
00185 };
00186 
00187 URET uffs_DeviceInitLock(uffs_Device *dev);
00188 URET uffs_DeviceLock(uffs_Device *dev);
00189 URET uffs_DeviceUnLock(uffs_Device *dev);
00190 uffs_Device * uffs_GetDevice(const char *mountPoint);
00191 const char * uffs_GetDeviceMountPoint(uffs_Device *dev);
00192 void uffs_PutDevice(uffs_Device *dev);
00193 
00194 
00195 
00196 #ifdef __cplusplus
00197 }
00198 #endif
00199 
00200 
00201 #endif
00202 

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