Exemplo n.º 1
0
struct yaffs_dev *yflash2_install_drv(const char *name)
{
	struct yaffs_dev *dev = NULL;
	struct yaffs_param *param;
	struct yaffs_driver *drv;

	dev = malloc(sizeof(*dev));

	if(!dev)
		return NULL;

	memset(dev, 0, sizeof(*dev));

	dev->param.name = strdup(name);

	if(!dev->param.name) {
		free(dev);
		return NULL;
	}

	drv = &dev->drv;

	drv->drv_write_chunk_fn = yflash2_WriteChunk;
	drv->drv_read_chunk_fn = yflash2_ReadChunk;
	drv->drv_erase_fn = yflash2_EraseBlock;
	drv->drv_mark_bad_fn = yflash2_MarkBad;
	drv->drv_check_bad_fn = yflash2_CheckBad;
	drv->drv_initialise_fn = yflash2_Initialise;

	param = &dev->param;

	param->total_bytes_per_chunk = 2048;
	param->chunks_per_block = 64;
	param->start_block = 0;
	param->end_block = yflash2_GetNumberOfBlocks()-1;
	param->is_yaffs2 = 1;
	param->use_nand_ecc=1;

	param->n_reserved_blocks = 5;
	param->wide_tnodes_disabled=0;
	param->refresh_period = 1000;
	param->n_caches = 10; // Use caches

	param->enable_xattr = 1;

	/* dev->driver_context is not used by this simulator */

	yaffs_add_device(dev);

	return dev;
}
Exemplo n.º 2
0
int yaffs_StartUp(void)
{
	// Stuff to configure YAFFS
	// Stuff to initialise anything special (eg lock semaphore).
	yaffsfs_LocalInitialisation();
	
	// Set up devices
	// /ram1   ram, yaffs1
	memset(&ram1Dev,0,sizeof(ram1Dev));
	ram1Dev.param.totalBytesPerChunk = 512;
	ram1Dev.param.nChunksPerBlock = 32;
	ram1Dev.param.nReservedBlocks = 2; // Set this smaller for RAM
	ram1Dev.param.startBlock = 0; // Can use block 0
	ram1Dev.param.endBlock = 127; // Last block in 2MB.	
	//ram1Dev.param.useNANDECC = 1;
	ram1Dev.param.nShortOpCaches = 0;	// Disable caching on this device.
	ram1Dev.context = (void *) 0;	// Used to identify the device in fstat.
	ram1Dev.param.writeChunkWithTagsToNAND = yramdisk_WriteChunkWithTagsToNAND;
	ram1Dev.param.readChunkWithTagsFromNAND = yramdisk_ReadChunkWithTagsFromNAND;
	ram1Dev.param.eraseBlockInNAND = yramdisk_EraseBlockInNAND;
	ram1Dev.param.initialiseNAND = yramdisk_InitialiseNAND;

	// /M18-1 yaffs1 on M18 nor sim
	memset(&m18_1Dev,0,sizeof(m18_1Dev));
	m18_1Dev.param.totalBytesPerChunk = 1024;
	m18_1Dev.param.nChunksPerBlock =248;
	m18_1Dev.param.nReservedBlocks = 2;
	m18_1Dev.param.startBlock = 0; // Can use block 0
	m18_1Dev.param.endBlock = 31; // Last block
	m18_1Dev.param.useNANDECC = 0; // use YAFFS's ECC
	m18_1Dev.param.nShortOpCaches = 10; // Use caches
	m18_1Dev.context = (void *) 1;	// Used to identify the device in fstat.
	m18_1Dev.param.writeChunkToNAND = ynorif1_WriteChunkToNAND;
	m18_1Dev.param.readChunkFromNAND = ynorif1_ReadChunkFromNAND;
	m18_1Dev.param.eraseBlockInNAND = ynorif1_EraseBlockInNAND;
	m18_1Dev.param.initialiseNAND = ynorif1_InitialiseNAND;
	m18_1Dev.param.deinitialiseNAND = ynorif1_DeinitialiseNAND;


	// /yaffs2 
	// Set this puppy up to use
	// the file emulation space as
	// 2kpage/64chunk per block
	//
	memset(&flashDev,0,sizeof(flashDev));

	flashDev.param.totalBytesPerChunk = 2048;
	flashDev.param.nChunksPerBlock = 64;
	flashDev.param.nReservedBlocks = 5;
	flashDev.param.inbandTags = 0;
	flashDev.param.startBlock = 0;
	flashDev.param.endBlock = yflash2_GetNumberOfBlocks()-1;
	flashDev.param.isYaffs2 = 1;
	flashDev.param.useNANDECC=1;
	flashDev.param.wideTnodesDisabled=0;
	flashDev.param.refreshPeriod = 10000;
	flashDev.param.nShortOpCaches = 10; // Use caches
	flashDev.context = (void *) 2;	// Used to identify the device in fstat.
	flashDev.param.writeChunkWithTagsToNAND = yflash2_WriteChunkWithTagsToNAND;
	flashDev.param.readChunkWithTagsFromNAND = yflash2_ReadChunkWithTagsFromNAND;
	flashDev.param.eraseBlockInNAND = yflash2_EraseBlockInNAND;
	flashDev.param.initialiseNAND = yflash2_InitialiseNAND;
	flashDev.param.markNANDBlockBad = yflash2_MarkNANDBlockBad;
	flashDev.param.queryNANDBlock = yflash2_QueryNANDBlock;


	yaffs_initialise(yaffsfs_config);
	
	return 0;
}