提交 ff350c4e 编写于 作者: G goprife@gmail.com

modify the line break character of yaffs.diff

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2075 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 4fef27fb
...@@ -735,73 +735,158 @@ index 939cd3a..f693c16 100644 ...@@ -735,73 +735,158 @@ index 939cd3a..f693c16 100644
#endif #endif
diff --git a/yaffs_nandcfg.c b/yaffs_nandcfg.c diff --git a/yaffs_nandcfg.c b/yaffs_nandcfg.c
new file mode 100644 new file mode 100644
index 0000000..4720aa2 index 0000000..099fa38
--- /dev/null --- /dev/null
+++ b/yaffs_nandcfg.c +++ b/yaffs_nandcfg.c
@@ -0,0 +1,64 @@ @@ -0,0 +1,149 @@
+#include <rtthread.h> #include <rtdevice.h> #include <dfs_fs.h> #include <dfs_def.h> +#include <rtthread.h>
+ #include "yaffsfs.h" #include "yaffs_nandif.h" #include "yaffs_trace.h" /* * RT-Thread Device Interface for yaffs */ static int nand_init(struct yaffs_dev *dev) { return YAFFS_OK; } static int nand_deinit(struct yaffs_dev *dev) { return YAFFS_OK; } /* if block is good, return YAFFS_OK, else return YAFFS_FAIL */ static int nand_checkblock(struct yaffs_dev *dev, unsigned block) { rt_err_t res; res = rt_mtd_nand_check_block(RT_MTD_NAND_DEVICE(dev->os_context), block); return res == RT_EOK ? YAFFS_OK : YAFFS_FAIL; } static int nand_markbadblk(struct yaffs_dev *dev, unsigned block) { rt_err_t res; res = rt_mtd_nand_mark_badblock(RT_MTD_NAND_DEVICE(dev->os_context), block); return res == RT_EOK ? YAFFS_OK : YAFFS_FAIL; } static int nand_eraseblock(struct yaffs_dev *dev, unsigned block) { int res; res = rt_mtd_nand_erase_block(RT_MTD_NAND_DEVICE(dev->os_context), block); return res == RT_EOK ? YAFFS_OK : YAFFS_FAIL; } static int nand_readpage( struct yaffs_dev *dev, unsigned page, unsigned char *data, unsigned data_len, /* page data */ unsigned char *spare, unsigned spare_len,/* page spare */ int *ecc_status) { int res; unsigned char spare_buf[64]; res = rt_mtd_nand_read(RT_MTD_NAND_DEVICE(dev->os_context), page, data, data_len, spare_buf, spare_len + 5); rt_memcpy(spare, spare_buf + 5, spare_len); if (res == 0) *ecc_status = 0; else if (res == -1) *ecc_status = 1; else *ecc_status = -1; return YAFFS_OK; } static int nand_writepage( struct yaffs_dev *dev, unsigned page, const unsigned char *data, unsigned data_len, /* page data */ const unsigned char *spare, unsigned spare_len) /* page spare */ { int res; unsigned char spare_buf[64]; //not use malloc, this can be faster rt_memset(spare_buf, 0xFF, sizeof(spare_buf)); rt_memcpy(spare_buf+5, spare, spare_len); res = rt_mtd_nand_write(RT_MTD_NAND_DEVICE(dev->os_context), page, data, data_len, spare_buf, spare_len + 5); if (res != RT_EOK) goto __error; return YAFFS_OK; __error: return YAFFS_FAIL; } +#include <rtdevice.h>
+ +#include <dfs_fs.h>
+ +#include <dfs_def.h>
+/* +
+ * yaffs2 configuration +#include "yaffsfs.h"
+ */ +#include "yaffs_nandif.h"
+#define CONFIG_YAFFS_ECC_MODE 1 //1 use ecc, 0 no ecc +#include "yaffs_trace.h"
+#define CONFIG_YAFFS_INBAND_TAGS 0 //1 use in band tags, 0-no in band tags +
+#define CONFIG_YAFFS_USE_YAFFS2 1 //1 yaffs2, 0-yaffs1 +/*
+ + * RT-Thread Device Interface for yaffs
+void yaffs_config(ynandif_Geometry * g, struct rt_mtd_nand_device * dev) + */
+{ +static int nand_init(struct yaffs_dev *dev)
+ rt_memset(g,0,sizeof(ynandif_Geometry)); +{
+ + return YAFFS_OK;
+ g->start_block = dev->block_start; +}
+ g->end_block = dev->block_end; +
+ g->dataSize = dev->page_size; +static int nand_deinit(struct yaffs_dev *dev)
+ g->spareSize = dev->oob_size; +{
+ g->pagesPerBlock = dev->block_size / dev->page_size; + return YAFFS_OK;
+ +}
+ g->hasECC = CONFIG_YAFFS_ECC_MODE; +
+ g->inband_tags = CONFIG_YAFFS_INBAND_TAGS; +/* if block is good, return YAFFS_OK, else return YAFFS_FAIL */
+ g->useYaffs2 = CONFIG_YAFFS_USE_YAFFS2; +static int nand_checkblock(struct yaffs_dev *dev, unsigned block)
+ +{
+ g->privateData = dev;//will be copy to dev->os_context. + rt_err_t res;
+ + res = rt_mtd_nand_check_block(RT_MTD_NAND_DEVICE(dev->os_context), block);
+ g->initialise = nand_init; + return res == RT_EOK ? YAFFS_OK : YAFFS_FAIL;
+ g->deinitialise = nand_deinit; +}
+ g->readChunk = nand_readpage; +static int nand_markbadblk(struct yaffs_dev *dev, unsigned block)
+ g->writeChunk = nand_writepage; +{
+ g->eraseBlock = nand_eraseblock; + rt_err_t res;
+ g->checkBlockOk = nand_checkblock; + res = rt_mtd_nand_mark_badblock(RT_MTD_NAND_DEVICE(dev->os_context), block);
+ g->markBlockBad = nand_markbadblk; + return res == RT_EOK ? YAFFS_OK : YAFFS_FAIL;
+} +}
+ +
+static struct yaffs_dev *ynand_CreatePart(const YCHAR *name, ynandif_Geometry * g) +static int nand_eraseblock(struct yaffs_dev *dev, unsigned block)
+{ +{
+ return yaffs_add_dev_from_geometry(name, g); + int res;
+} + res = rt_mtd_nand_erase_block(RT_MTD_NAND_DEVICE(dev->os_context), block);
+ + return res == RT_EOK ? YAFFS_OK : YAFFS_FAIL;
+/* configuration for yaffs's log */ +}
+unsigned yaffs_trace_mask = +
+ +static int nand_readpage(
+ YAFFS_TRACE_SCAN | + struct yaffs_dev *dev,
+ YAFFS_TRACE_GC | + unsigned page,
+ YAFFS_TRACE_ERASE | + unsigned char *data, unsigned data_len, /* page data */
+ YAFFS_TRACE_ERROR | + unsigned char *spare, unsigned spare_len,/* page spare */
+ YAFFS_TRACE_TRACING | + int *ecc_status)
+ YAFFS_TRACE_ALLOCATE | +{
+ YAFFS_TRACE_BAD_BLOCKS | + int res;
+ YAFFS_TRACE_VERIFY | + unsigned char spare_buf[64];
+ +
+ 0; + res = rt_mtd_nand_read(RT_MTD_NAND_DEVICE(dev->os_context),
+ + page, data, data_len, spare_buf, spare_len + 5);
+int yaffs_start(const char * mount_point, ynandif_Geometry * g) + rt_memcpy(spare, spare_buf + 5, spare_len);
+{ + if (res == 0)
+ // Stuff to configure YAFFS + *ecc_status = 0;
+ // Stuff to initialise anything special (eg lock semaphore). + else if (res == -1)
+ yaffsfs_OSInitialisation(); + *ecc_status = 1;
+ ynand_CreatePart(mount_point, g); + else
+ + *ecc_status = -1;
+ return 0; +
+ return YAFFS_OK;
+}
+
+static int nand_writepage(
+ struct yaffs_dev *dev,
+ unsigned page,
+ const unsigned char *data, unsigned data_len, /* page data */
+ const unsigned char *spare, unsigned spare_len) /* page spare */
+{
+ int res;
+ unsigned char spare_buf[64]; //not use malloc, this can be faster
+ rt_memset(spare_buf, 0xFF, sizeof(spare_buf));
+ rt_memcpy(spare_buf+5, spare, spare_len);
+
+ res = rt_mtd_nand_write(RT_MTD_NAND_DEVICE(dev->os_context),
+ page, data, data_len, spare_buf, spare_len + 5);
+ if (res != RT_EOK)
+ goto __error;
+
+ return YAFFS_OK;
+
+__error:
+ return YAFFS_FAIL;
+}
+
+
+/*
+ * yaffs2 configuration
+ */
+#define CONFIG_YAFFS_ECC_MODE 1 //1 use ecc, 0 no ecc
+#define CONFIG_YAFFS_INBAND_TAGS 0 //1 use in band tags, 0-no in band tags
+#define CONFIG_YAFFS_USE_YAFFS2 1 //1 yaffs2, 0-yaffs1
+
+void yaffs_config(ynandif_Geometry * g, struct rt_mtd_nand_device * dev)
+{
+ rt_memset(g,0,sizeof(ynandif_Geometry));
+
+ g->start_block = dev->block_start;
+ g->end_block = dev->block_end;
+ g->dataSize = dev->page_size;
+ g->spareSize = dev->oob_size;
+ g->pagesPerBlock = dev->block_size / dev->page_size;
+
+ g->hasECC = CONFIG_YAFFS_ECC_MODE;
+ g->inband_tags = CONFIG_YAFFS_INBAND_TAGS;
+ g->useYaffs2 = CONFIG_YAFFS_USE_YAFFS2;
+
+ g->privateData = dev;//will be copy to dev->os_context.
+
+ g->initialise = nand_init;
+ g->deinitialise = nand_deinit;
+ g->readChunk = nand_readpage;
+ g->writeChunk = nand_writepage;
+ g->eraseBlock = nand_eraseblock;
+ g->checkBlockOk = nand_checkblock;
+ g->markBlockBad = nand_markbadblk;
+}
+
+static struct yaffs_dev *ynand_CreatePart(const YCHAR *name, ynandif_Geometry * g)
+{
+ return yaffs_add_dev_from_geometry(name, g);
+}
+
+/* configuration for yaffs's log */
+unsigned yaffs_trace_mask =
+
+ YAFFS_TRACE_SCAN |
+ YAFFS_TRACE_GC |
+ YAFFS_TRACE_ERASE |
+ YAFFS_TRACE_ERROR |
+ YAFFS_TRACE_TRACING |
+ YAFFS_TRACE_ALLOCATE |
+ YAFFS_TRACE_BAD_BLOCKS |
+ YAFFS_TRACE_VERIFY |
+
+ 0;
+
+int yaffs_start(const char * mount_point, ynandif_Geometry * g)
+{
+ // Stuff to configure YAFFS
+ // Stuff to initialise anything special (eg lock semaphore).
+ yaffsfs_OSInitialisation();
+ ynand_CreatePart(mount_point, g);
+
+ return 0;
+} +}
diff --git a/yaffs_osglue.c b/yaffs_osglue.c diff --git a/yaffs_osglue.c b/yaffs_osglue.c
new file mode 100644 new file mode 100644
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册