X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=mtdemul%2Fnandemul2k.c;h=4d25aaabf08fc0b15d246d98a7c48fac4dbe3b5c;hb=a6c3366bdc908169673539dcb464369061ed5eb8;hp=2980f9adcb791521e6798de634f5210b9e2a729f;hpb=37fd9ec3587b5c4d497a7682522a9adfab682e51;p=yaffs2.git diff --git a/mtdemul/nandemul2k.c b/mtdemul/nandemul2k.c index 2980f9a..4d25aaa 100644 --- a/mtdemul/nandemul2k.c +++ b/mtdemul/nandemul2k.c @@ -1,7 +1,7 @@ /* - * YAFFS: Yet another FFS. A NAND-flash specific file system. + * YAFFS: Yet Another Flash File System. A NAND-flash specific file system. * - * Copyright (C) 2002 Aleph One Ltd. + * Copyright (C) 2002-2007 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning @@ -9,8 +9,9 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. - * - * + */ + +/* * This version hacked for emulating 2kpage NAND for YAFFS2 testing. */ @@ -27,14 +28,16 @@ #include #include #include +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) #include +#endif #include #include #include #include +#include "../yaffs_nandemul2k.h" -#define T(f,x) printk x #define ALLOCATE(x) kmalloc(x,GFP_KERNEL) #define FREE(x) kfree(x) @@ -42,13 +45,14 @@ -#define EM_SIZE_IN_MEG 4 -#define PAGE_DATA_SIZE (2048) -#define PAGE_SPARE_SIZE (64) -#define PAGES_PER_BLOCK (64) #define NAND_SHIFT (11) // Shifter for 2k +#define PAGE_DATA_SIZE (1 << NAND_SHIFT) +#define PAGE_SPARE_SIZE (64) +#define BLK_SHIFT 6 +#define PAGES_PER_BLOCK (1 << BLK_SHIFT) // = 64 +#define EM_SIZE_IN_MEG 4 #define EM_SIZE_IN_BYTES (EM_SIZE_IN_MEG * (1<<20)) #define PAGE_TOTAL_SIZE (PAGE_DATA_SIZE+PAGE_SPARE_SIZE) @@ -251,7 +255,7 @@ int nandemul2k_GetNumberOfBlocks(void) {return nandemul2k_CalcNBlocks();} -int nandemul2k_ReadId(__u8 *vendorId, __u8 *deviceId) +static int nandemul2k_ReadId(__u8 *vendorId, __u8 *deviceId) { *vendorId = 'Y'; *deviceId = '2'; @@ -260,7 +264,7 @@ int nandemul2k_ReadId(__u8 *vendorId, __u8 *deviceId) } -int nandemul2k_ReadStatus(__u8 *status) +static int nandemul2k_ReadStatus(__u8 *status) { *status = 0; return 1; @@ -284,11 +288,16 @@ static int nand_write (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); static int nand_write_ecc (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf, - const u_char *oob_buf, struct nand_oobinfo *dummy); + u_char *oob_buf, struct nand_oobinfo *dummy); static int nand_write_oob (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,7)) +static int nand_writev (struct mtd_info *mtd, const struct kvec *vecs, + unsigned long count, loff_t to, size_t *retlen); +#else static int nand_writev (struct mtd_info *mtd, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen); +#endif static int nand_erase (struct mtd_info *mtd, struct erase_info *instr); static void nand_sync (struct mtd_info *mtd); @@ -411,7 +420,7 @@ static int nand_write (struct mtd_info *mtd, loff_t to, size_t len, */ static int nand_write_ecc (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf, - const u_char *oob_buf, struct nand_oobinfo *dummy) + u_char *oob_buf, struct nand_oobinfo *dummy) { int start, page; @@ -507,8 +516,13 @@ static int nand_write_oob (struct mtd_info *mtd, loff_t to, size_t len, /* * NAND write with iovec */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,7)) +static int nand_writev (struct mtd_info *mtd, const struct kvec *vecs, + unsigned long count, loff_t to, size_t *retlen) +#else static int nand_writev (struct mtd_info *mtd, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen) +#endif { return -EINVAL; } @@ -545,8 +559,8 @@ static int nand_erase (struct mtd_info *mtd, struct erase_info *instr) return -EINVAL; } - nBlocks = instr->len >> (NAND_SHIFT + 5); - block = instr->addr >> (NAND_SHIFT + 5); + nBlocks = instr->len >> (NAND_SHIFT + BLK_SHIFT); + block = instr->addr >> (NAND_SHIFT + BLK_SHIFT); for(i = 0; i < nBlocks; i++) { @@ -562,12 +576,12 @@ static int nand_erase (struct mtd_info *mtd, struct erase_info *instr) } -int nand_block_isbad(struct mtd_info *mtd,int blockNo) +static int nand_block_isbad(struct mtd_info *mtd, loff_t ofs) { return 0; } -int nand_block_markbad(struct mtd_info *mtd, int blockNo) +static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs) { return 0; } @@ -585,7 +599,7 @@ static void nand_sync (struct mtd_info *mtd) /* * Scan for the NAND device */ -int nand_scan (struct mtd_info *mtd,int nchips) +static int nandemul2k_scan (struct mtd_info *mtd,int nchips) { mtd->oobblock = PAGE_DATA_SIZE; mtd->oobsize = PAGE_SPARE_SIZE; @@ -618,6 +632,8 @@ int nand_scan (struct mtd_info *mtd,int nchips) mtd->suspend = NULL; mtd->resume = NULL; + mtd->name = "NANDemul2k"; + /* Return happy */ return 0; } @@ -636,9 +652,9 @@ __setup("sizeInMB=",sizeInMB); static struct mtd_partition nandemul2k_partition[] = { - { name: "NANDemul partition 1", - offset: 0, - size: 0 }, + { .name = "NANDemul partition 1", + .offset = 0, + .size = 0 }, }; static int nPartitions = sizeof(nandemul2k_partition)/sizeof(nandemul2k_partition[0]); @@ -653,7 +669,7 @@ int __init nandemul2k_init (void) CheckInit(); - nand_scan(&nandemul2k_mtd,1); + nandemul2k_scan(&nandemul2k_mtd,1); // Build the partition table