From c38413dc90316fc302d0b178abbae116fbed82e1 Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Fri, 16 Jun 2017 15:42:08 +0200 Subject: [PATCH] flash: change prototype of flash_copy() and use the default implementation in the sandbox --- include/flash.h | 4 ++-- source/core/flash.c | 4 ++-- source/drivers/sandbox_flash.c | 27 +-------------------------- source/ftl/ftl.c | 2 +- source/ftl/gc.c | 2 +- 5 files changed, 7 insertions(+), 32 deletions(-) diff --git a/include/flash.h b/include/flash.h index 2f45ce3..d677046 100644 --- a/include/flash.h +++ b/include/flash.h @@ -12,7 +12,7 @@ struct flash_ops { size_t (* read)(struct flash_dev *dev, uint32_t addr, void *data, size_t len); size_t (* write)(struct flash_dev *dev, uint32_t addr, const void *data, size_t len); - int (* copy)(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len); + size_t (* copy)(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len); int (* is_erased)(struct flash_dev *dev, uint32_t addr); int (* erase)(struct flash_dev *dev, uint32_t addr); }; @@ -34,6 +34,6 @@ size_t flash_get_capacity(struct flash_dev *dev); size_t flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len); size_t flash_write(struct flash_dev *dev, uint32_t addr, const void *data, size_t len); -int flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len); +size_t flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len); int flash_is_erased(struct flash_dev *dev, uint32_t addr, size_t len); int flash_erase(struct flash_dev *dev, uint32_t addr, size_t len); diff --git a/source/core/flash.c b/source/core/flash.c index f86643f..bc6e3a0 100644 --- a/source/core/flash.c +++ b/source/core/flash.c @@ -96,10 +96,10 @@ size_t flash_write(struct flash_dev *dev, uint32_t addr, const void *data, return dev->ops->write(dev, addr, data, len); } -int flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len) +size_t flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len) { if (!dev) - return -1; + return 0; return dev->ops->copy(dev, dst, src, len); } diff --git a/source/drivers/sandbox_flash.c b/source/drivers/sandbox_flash.c index 2f89503..21f9ea6 100644 --- a/source/drivers/sandbox_flash.c +++ b/source/drivers/sandbox_flash.c @@ -23,8 +23,6 @@ static size_t stdio_flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len); static size_t stdio_flash_write(struct flash_dev *dev, uint32_t addr, const void *data, size_t len); -static int stdio_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, - size_t len); static int stdio_flash_erase(struct flash_dev *dev, uint32_t addr); static void stdio_flash_release(struct flash_dev *dev); @@ -33,7 +31,7 @@ static struct flash_ops stdio_flash_ops = { .get_size = stdio_flash_get_size, .read = stdio_flash_read, .write = stdio_flash_write, - .copy = stdio_flash_copy, + .copy = default_flash_copy, .is_erased = default_flash_is_erased, .erase = stdio_flash_erase, }; @@ -85,29 +83,6 @@ static size_t stdio_flash_write(struct flash_dev *dev, uint32_t addr, return len; } -static int stdio_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, - size_t len) -{ - uint8_t data[64]; - size_t nbytes; - - while (len) { - nbytes = min(sizeof data, len); - - if (stdio_flash_read(dev, src, data, nbytes) == 0) - return -1; - - if (stdio_flash_write(dev, dst, data, nbytes) == 0) - return -1; - - dst += nbytes; - src += nbytes; - len -= nbytes; - } - - return 0; -} - static int stdio_flash_erase(struct flash_dev *dev, uint32_t addr) { struct stdio_flash_priv *priv = dev->priv; diff --git a/source/ftl/ftl.c b/source/ftl/ftl.c index 0e7c91a..63222cb 100644 --- a/source/ftl/ftl.c +++ b/source/ftl/ftl.c @@ -122,7 +122,7 @@ int ftl_trim(struct ftl_map *map, uint32_t va) } if (flash_copy(map->dev, map->head << map->log2_page_size, - alt_page << map->log2_page_size, 1 << map->log2_page_size) < 0) + alt_page << map->log2_page_size, 1 << map->log2_page_size) == 0) return -1; return write_upage(map, NULL, &page_desc); diff --git a/source/ftl/gc.c b/source/ftl/gc.c index d8d8a72..84db628 100644 --- a/source/ftl/gc.c +++ b/source/ftl/gc.c @@ -36,7 +36,7 @@ static int free_page(struct ftl_map *map, uint32_t upage) page_desc.nused_pages = map->nused_pages; if (flash_copy(map->dev, map->head << map->log2_page_size, - upage << map->log2_page_size, 1 << map->log2_page_size) < 0) + upage << map->log2_page_size, 1 << map->log2_page_size) == 0) return -1; return write_upage(map, NULL, &page_desc);