X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Fyaffs_nandif.h;h=a130f3c3881bc12b9028ec2a889e9fb199114b7c;hp=1a17262ac5519eb79d7b70b6b3e25f67dfb0572d;hb=86e364669f775e70f32204769217ecf035508c1d;hpb=eec9a1ffcc9ff838440fe6e833d7205ecd8a64ea diff --git a/direct/yaffs_nandif.h b/direct/yaffs_nandif.h index 1a17262..a130f3c 100644 --- a/direct/yaffs_nandif.h +++ b/direct/yaffs_nandif.h @@ -1,7 +1,7 @@ /* * YAFFS: Yet another Flash File System . A NAND-flash specific file system. * - * Copyright (C) 2002-2007 Aleph One Ltd. + * Copyright (C) 2002-2010 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning @@ -19,22 +19,55 @@ #include "yaffs_guts.h" + typedef struct { - unsigned startBlock; - unsigned endBlock; - unsigned dataSize; // Number of data bytes per page - unsigned spareSize; // Number of spare bytes per chunk - unsigned pagesPerBlock; - unsigned hasECC; - unsigned inbandTags; // Use inband tags on this device - unsigned useYaffs2; + unsigned start_block; + unsigned end_block; + unsigned dataSize; + unsigned spareSize; + unsigned pagesPerBlock; + unsigned hasECC; + unsigned inband_tags; + unsigned useYaffs2; + + int (*initialise)(struct yaffs_dev *dev); + int (*deinitialise)(struct yaffs_dev *dev); + + int (*readChunk) (struct yaffs_dev *dev, + unsigned pageId, + unsigned char *data, unsigned dataLength, + unsigned char *spare, unsigned spareLength, + int *eccStatus); +// ECC status is set to 0 for OK, 1 for fixed, -1 for unfixed. + + int (*writeChunk)(struct yaffs_dev *dev, + unsigned pageId, + const unsigned char *data, unsigned dataLength, + const unsigned char *spare, unsigned spareLength); + + int (*eraseBlock)(struct yaffs_dev *dev, unsigned blockId); + + int (*checkBlockOk)(struct yaffs_dev *dev, unsigned blockId); + int (*markBlockBad)(struct yaffs_dev *dev, unsigned blockId); + + void *privateData; + } ynandif_Geometry; -int ynandif_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u8 *data, const yaffs_ExtendedTags *tags); -int ynandif_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_ExtendedTags *tags); -int ynandif_EraseBlockInNAND(yaffs_Device *dev, int blockNumber); -int ynandif_InitialiseNAND(yaffs_Device *dev); -int ynandif_MarkNANDBlockBad(yaffs_Device *dev,int blockNumber); -int ynandif_QueryNANDBlock(yaffs_Device *dev, int blockNo, yaffs_BlockState *state, __u32 *sequenceNumber); -int ynandif_GetGeometry(yaffs_Device *dev, ynandif_Geometry *geometry); +struct yaffs_dev * + yaffs_add_dev_from_geometry(const YCHAR *name, + const ynandif_Geometry *geometry); + +#if 0 + +int ynandif_WriteChunkWithTagsToNAND(struct yaffs_dev *dev,int nand_chunk,const u8 *data, const struct yaffs_ext_tags *tags); +int ynandif_ReadChunkWithTagsFromNAND(struct yaffs_dev *dev,int nand_chunk, u8 *data, struct yaffs_ext_tags *tags); +int ynandif_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber); +int ynandif_InitialiseNAND(struct yaffs_dev *dev); +int ynandif_MarkNANDBlockBad(struct yaffs_dev *dev,int blockNumber); +int ynandif_QueryNANDBlock(struct yaffs_dev *dev, int block_no, enum yaffs_block_state *state, u32 *seq_number); +int ynandif_GetGeometry(struct yaffs_dev *dev, ynandif_Geometry *geometry); +#endif + + #endif