From a8beb53fa093c3a9a43289365245a26f3cc083a7 Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Fri, 16 Jun 2017 15:40:02 +0200 Subject: [PATCH] flash: implement a default function for copying data --- include/flash.h | 2 ++ source/core/flash.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/flash.h b/include/flash.h index 8748068..2f45ce3 100644 --- a/include/flash.h +++ b/include/flash.h @@ -24,6 +24,8 @@ struct flash_dev { }; int default_flash_is_erased(struct flash_dev *dev, uint32_t addr); +size_t default_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, + size_t len); struct flash_dev *flash_probe(void); void flash_release(struct flash_dev *dev); diff --git a/source/core/flash.c b/source/core/flash.c index 47a6750..f86643f 100644 --- a/source/core/flash.c +++ b/source/core/flash.c @@ -29,6 +29,32 @@ int default_flash_is_erased(struct flash_dev *dev, uint32_t addr) return 1; } +size_t default_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, + size_t len) +{ + uint8_t data[32]; + size_t nbytes, ret = 0; + + while (len) { + nbytes = min(sizeof data, len); + + if (flash_read(dev, src, data, nbytes) == 0) + return -1; + + if (flash_write(dev, dst, data, nbytes) == 0) + return -1; + + dst += nbytes; + src += nbytes; + len -= nbytes; + ret += nbytes; + } + + return ret; +} + + + void flash_release(struct flash_dev *dev) { if (!dev)