- YCHAR *clonedName = YMALLOC(sizeof(YCHAR) * (yaffs_strnlen(name,YAFFS_MAX_NAME_LENGTH)+1));
- struct yaffs_DeviceStruct *dev = YMALLOC(sizeof(struct yaffs_DeviceStruct));
-
- if(dev && clonedName){
- memset(dev,0,sizeof(struct yaffs_DeviceStruct));
- yaffs_strcpy(clonedName,name);
-
- dev->param.name = clonedName;
- dev->param.writeChunkWithTagsToNAND = ynandif_WriteChunkWithTagsToNAND;
- dev->param.readChunkWithTagsFromNAND = ynandif_ReadChunkWithTagsFromNAND;
- dev->param.eraseBlockInNAND = ynandif_EraseBlockInNAND;
- dev->param.initialiseNAND = ynandif_InitialiseNAND;
- dev->param.queryNANDBlock = ynandif_QueryNANDBlock;
- dev->param.markNANDBlockBad = ynandif_MarkNANDBlockBad;
- dev->param.nShortOpCaches = 20;
- dev->param.startBlock = geometry->startBlock;
- dev->param.endBlock = geometry->endBlock;
- dev->param.totalBytesPerChunk = geometry->dataSize;
- dev->param.spareBytesPerChunk = geometry->spareSize;
- dev->param.inbandTags = geometry->inbandTags;
- dev->param.nChunksPerBlock = geometry->pagesPerBlock;
- dev->param.useNANDECC = geometry->hasECC;
- dev->param.isYaffs2 = geometry->useYaffs2;
- dev->param.nReservedBlocks = 5;
- dev->driverContext = (void *)geometry;
-
- yaffs_AddDevice(dev);
+ YCHAR *clonedName = malloc(sizeof(YCHAR) *
+ (strnlen(name, YAFFS_MAX_NAME_LENGTH)+1));
+ struct yaffs_dev *dev = malloc(sizeof(struct yaffs_dev));
+ struct yaffs_param *param;
+
+ if (dev && clonedName) {
+ memset(dev, 0, sizeof(struct yaffs_dev));
+ strcpy(clonedName, name);
+
+ param = &dev->param;
+
+ param->name = clonedName;
+ param->write_chunk_tags_fn = ynandif_WriteChunkWithTagsToNAND;
+ param->read_chunk_tags_fn = ynandif_ReadChunkWithTagsFromNAND;
+ param->erase_fn = ynandif_EraseBlockInNAND;
+ param->initialise_flash_fn = ynandif_InitialiseNAND;
+ param->query_block_fn = ynandif_QueryNANDBlock;
+ param->bad_block_fn = ynandif_MarkNANDBlockBad;
+ param->n_caches = 20;
+ param->start_block = geometry->start_block;
+ param->end_block = geometry->end_block;
+ param->total_bytes_per_chunk = geometry->dataSize;
+ param->spare_bytes_per_chunk = geometry->spareSize;
+ param->inband_tags = geometry->inband_tags;
+ param->chunks_per_block = geometry->pagesPerBlock;
+ param->use_nand_ecc = geometry->hasECC;
+ param->is_yaffs2 = geometry->useYaffs2;
+ param->n_reserved_blocks = 5;
+ dev->driver_context = (void *)geometry;
+
+ yaffs_add_device(dev);