X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_mtdif_multi.c;h=2d34b017d08e696939347ade4341868351aa8a21;hp=7ae63c54a903d2032ecc72aba5640d24203a44f5;hb=7c666cd589631a555da943396a3124a610487b7e;hpb=8ff46d3718875f2af99aab2d2db822db4c729973 diff --git a/yaffs_mtdif_multi.c b/yaffs_mtdif_multi.c index 7ae63c5..2d34b01 100644 --- a/yaffs_mtdif_multi.c +++ b/yaffs_mtdif_multi.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 * @@ -18,16 +17,21 @@ #include "linux/mtd/mtd.h" #include "linux/types.h" #include "linux/time.h" +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)) #include "linux/mtd/nand.h" +#else +#include "linux/mtd/rawnand.h" +#endif #include "linux/kernel.h" #include "linux/version.h" #include "linux/types.h" +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) +#include "uapi/linux/major.h" +#endif #include "yaffs_trace.h" #include "yaffs_guts.h" #include "yaffs_linux.h" - - #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0)) #define MTD_OPS_AUTO_OOB MTD_OOB_AUTO #endif @@ -41,24 +45,25 @@ #define mtd_block_markbad(m, offs) (m)->block_markbad(m, offs) #endif - - int nandmtd_erase_block(struct yaffs_dev *dev, int block_no) { struct mtd_info *mtd = yaffs_dev_to_mtd(dev); - u32 addr = - ((loff_t) block_no) * dev->param.total_bytes_per_chunk * - dev->param.chunks_per_block; + u32 addr = ((loff_t) block_no) * dev->param.total_bytes_per_chunk * + dev->param.chunks_per_block; struct erase_info ei; int retval = 0; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0)) ei.mtd = mtd; +#endif ei.addr = addr; ei.len = dev->param.total_bytes_per_chunk * dev->param.chunks_per_block; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0)) ei.time = 1000; ei.retries = 2; ei.callback = NULL; ei.priv = (u_long) dev; +#endif retval = mtd_erase(mtd, &ei); @@ -68,10 +73,9 @@ int nandmtd_erase_block(struct yaffs_dev *dev, int block_no) return YAFFS_FAIL; } - -static int yaffs_mtd_write(struct yaffs_dev *dev, int nand_chunk, - const u8 *data, int data_len, - const u8 *oob, int oob_len) +static int yaffs_mtd_write(struct yaffs_dev *dev, int nand_chunk, + const u8 *data, int data_len, + const u8 *oob, int oob_len) { struct mtd_info *mtd = yaffs_dev_to_mtd(dev); loff_t addr; @@ -79,8 +83,8 @@ static int yaffs_mtd_write(struct yaffs_dev *dev, int nand_chunk, int retval; yaffs_trace(YAFFS_TRACE_MTD, - "yaffs_mtd_write(%p, %d, %p, %d, %p, %d)\n", - dev, nand_chunk, data, data_len, oob, oob_len); + "yaffs_mtd_write(%p, %d, %p, %d, %p, %d)\n", + dev, nand_chunk, data, data_len, oob, oob_len); if (!data || !data_len) { data = NULL; @@ -168,7 +172,7 @@ static int yaffs_mtd_read(struct yaffs_dev *dev, int nand_chunk, return YAFFS_OK; } -static int yaffs_mtd_erase(struct yaffs_dev *dev, int block_no) +static int yaffs_mtd_erase(struct yaffs_dev *dev, int block_no) { struct mtd_info *mtd = yaffs_dev_to_mtd(dev); @@ -181,13 +185,17 @@ static int yaffs_mtd_erase(struct yaffs_dev *dev, int block_no) dev->param.chunks_per_block; addr = ((loff_t) block_no) * block_size; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0)) ei.mtd = mtd; +#endif ei.addr = addr; ei.len = block_size; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0)) ei.time = 1000; ei.retries = 2; ei.callback = NULL; ei.priv = (u_long) dev; +#endif retval = mtd_erase(mtd, &ei); @@ -231,7 +239,6 @@ static int yaffs_mtd_deinitialise(struct yaffs_dev *dev) return YAFFS_OK; } - void yaffs_mtd_drv_install(struct yaffs_dev *dev) { struct yaffs_driver *drv = &dev->drv; @@ -245,7 +252,6 @@ void yaffs_mtd_drv_install(struct yaffs_dev *dev) drv->drv_deinitialise_fn = yaffs_mtd_deinitialise; } - struct mtd_info * yaffs_get_mtd_device(dev_t sdev) { struct mtd_info *mtd; @@ -300,9 +306,8 @@ int yaffs_verify_mtd(struct mtd_info *mtd, int yaffs_version, int inband_tags) return 0; } - void yaffs_put_mtd_device(struct mtd_info *mtd) { - if(mtd) + if (mtd) put_mtd_device(mtd); }