X-Git-Url: https://yaffs.net/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_guts.c;fp=yaffs_guts.c;h=b67055adef5de24874aaaa1b3121fcb252b84091;hp=1602c4bde572e538482953ee10bff65d1624b5d9;hb=c83e416cba6748e7a436c5df6a202349ff4d0fe2;hpb=8a3135fb92f6ab11f3d2f35b1d415e00c5b7dc9f diff --git a/yaffs_guts.c b/yaffs_guts.c index 1602c4b..b67055a 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -4986,6 +4986,42 @@ int yaffs_get_n_free_chunks(struct yaffs_dev *dev) return n_free; } + +int yaffs_format_dev(struct yaffs_dev *dev) +{ + int i; + enum yaffs_block_state state; + u32 dummy; + + if(dev->is_mounted) + return YAFFS_FAIL; + + /* + * The runtime variables might not have been set up, + * so set up what we need. + */ + dev->internal_start_block = dev->param.start_block; + dev->internal_end_block = dev->param.end_block; + dev->block_offset = 0; + dev->chunk_offset = 0; + + if (dev->param.start_block == 0) { + dev->internal_start_block = dev->param.start_block + 1; + dev->internal_end_block = dev->param.end_block + 1; + dev->block_offset = 1; + dev->chunk_offset = dev->param.chunks_per_block; + } + + for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) { + yaffs_query_init_block_state(dev, i, &state, &dummy); + if (state != YAFFS_BLOCK_STATE_DEAD) + yaffs_erase_block(dev, i); + } + + return YAFFS_OK; +} + + /* * Marshalling functions to get loff_t file sizes into and out of * object headers.