X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=direct%2Ftest-framework%2Fyaffs_m18_drv.c;h=540d23a0d87a35267ffb9268e6a4f612f10e55ab;hb=f83f5b03c1eea3fe26a0929583ffbd16df7c64f0;hp=0325968279ac0521e9d67c51a8c706e2eb8adf89;hpb=c08faae4258b29a794ad55ca160c5a247145c838;p=yaffs2.git diff --git a/direct/test-framework/yaffs_m18_drv.c b/direct/test-framework/yaffs_m18_drv.c index 0325968..540d23a 100644 --- a/direct/test-framework/yaffs_m18_drv.c +++ b/direct/test-framework/yaffs_m18_drv.c @@ -1,8 +1,7 @@ /* * YAFFS: Yet Another Flash File System. A NAND-flash specific file system. * - * Copyright (C) 2002-2011 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering + * Copyright (C) 2002-2018 Aleph One Ltd. * * Created by Charles Manning * @@ -67,12 +66,16 @@ /* Compile this for a simulation */ #include "ynorsim.h" -#define m18_drv_FlashInit() ynorsim_initialise() -#define m18_drv_FlashDeinit() ynorsim_shutdown() -#define m18_drv_FlashWrite32(addr,buf,nwords) ynorsim_wr32(addr,buf,nwords) -#define m18_drv_FlashRead32(addr,buf,nwords) ynorsim_rd32(addr,buf,nwords) -#define m18_drv_FlashEraseBlock(addr) ynorsim_erase(addr) -#define DEVICE_BASE ynorsim_get_base() + +static struct nor_sim *nor_sim; + +#define m18_drv_FlashInit() do {nor_sim = ynorsim_initialise("emfile-m18", BLOCKS_IN_DEVICE, BLOCK_SIZE_IN_BYTES); } while(0) +#define m18_drv_FlashDeinit() ynorsim_shutdown(nor_sim) +#define m18_drv_FlashWrite32(addr,buf,nwords) ynorsim_wr32(nor_sim,addr,buf,nwords) +#define m18_drv_FlashRead32(addr,buf,nwords) ynorsim_rd32(nor_sim,addr,buf,nwords) +#define m18_drv_FlashEraseBlock(addr) ynorsim_erase(nor_sim,addr) +#define DEVICE_BASE ynorsim_get_base(nor_sim) + #else /* Compile this to hook up to read hardware */ @@ -85,12 +88,13 @@ #define DEVICE_BASE (32 * 1024 * 1024) #endif + static u32 *Block2Addr(struct yaffs_dev *dev, int blockNumber) { - u32 addr; + u8 *addr; dev=dev; - addr = (u32) DEVICE_BASE; + addr = (u8*) DEVICE_BASE; addr += blockNumber * BLOCK_SIZE_IN_BYTES; return (u32 *) addr; @@ -98,9 +102,9 @@ static u32 *Block2Addr(struct yaffs_dev *dev, int blockNumber) static u32 *Block2FormatAddr(struct yaffs_dev *dev,int blockNumber) { - u32 addr; + u8 *addr; - addr = (u32) Block2Addr(dev,blockNumber); + addr = (u8*) Block2Addr(dev,blockNumber); addr += FORMAT_OFFSET; return (u32 *)addr; @@ -110,12 +114,12 @@ static u32 *Chunk2DataAddr(struct yaffs_dev *dev,int chunk_id) { unsigned block; unsigned chunkInBlock; - u32 addr; + u8 *addr; block = chunk_id/dev->param.chunks_per_block; chunkInBlock = chunk_id % dev->param.chunks_per_block; - addr = (u32) Block2Addr(dev,block); + addr = (u8*) Block2Addr(dev,block); addr += chunkInBlock * DATA_BYTES_PER_CHUNK; return (u32 *)addr; @@ -125,12 +129,12 @@ static u32 *Chunk2SpareAddr(struct yaffs_dev *dev,int chunk_id) { unsigned block; unsigned chunkInBlock; - u32 addr; + u8 *addr; block = chunk_id/dev->param.chunks_per_block; chunkInBlock = chunk_id % dev->param.chunks_per_block; - addr = (u32) Block2Addr(dev,block); + addr = (u8*) Block2Addr(dev,block); addr += SPARE_AREA_OFFSET; addr += chunkInBlock * (SPARE_BYTES_PER_CHUNK + M18_SKIP); return (u32 *)addr; @@ -219,6 +223,8 @@ static int m18_drv_ReadChunkFromNAND(struct yaffs_dev *dev,int nand_chunk, u32 *dataAddr = Chunk2DataAddr(dev,nand_chunk); u32 *spareAddr = Chunk2SpareAddr(dev,nand_chunk); + (void) data_len; + if(data) { m18_drv_FlashRead32(dataAddr,(u32 *)data,dev->param.total_bytes_per_chunk / 4); @@ -300,7 +306,7 @@ static int m18_drv_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber) static int m18_drv_InitialiseNAND(struct yaffs_dev *dev) { - int i; + u32 i; m18_drv_FlashInit(); /* Go through the blocks formatting them if they are not formatted */ @@ -315,6 +321,7 @@ static int m18_drv_InitialiseNAND(struct yaffs_dev *dev) static int m18_drv_Deinitialise_flash_fn(struct yaffs_dev *dev) { dev=dev; + m18_drv_FlashDeinit(); return YAFFS_OK;